我今天在想这个问题...
例如,如果我有一个包含20个字段的innodb表,100K的rows....how,内存中充满了这两个不同的查询:
1) SELECT field1, field2, field3 from table where field10 = '1';
2) Select * from table where field10 = '1';在这两种情况下,内存是否都填满了整个表?在填充innodb_buffer_pool时,如何考虑where?
发布于 2017-04-19 04:44:46
如果您的field10已编入索引,InnoDB只需读取索引即可查找具有该值的行。然后,它需要读取表中包含这些行的页面。它不需要读取整个表。
这就是索引的好处。
如果索引还包括field1、field2、field3,那么InnoDB可以跳过从表中读取页面。它可以仅从索引中获取所需的值。
ALTER TABLE `table` ADD KEY (field10, field1, field2, field3);有点像当你在电话簿中查找某人的名字时,你会发现他们的地址是一个“额外”字段。这本书不是按人的地址分类的,但你可以免费获得。
当您从索引中获取所需的列时,这称为覆盖索引,并且查询不必从表中读取整个行。
您可能会喜欢我的演示文稿https://www.slideshare.net/billkarwin/how-to-design-indexes-really
https://stackoverflow.com/questions/43480080
复制相似问题