首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql - "SELECT field“是否将内存填充为"SELECT *”?- Innodb

Mysql - "SELECT field“是否将内存填充为"SELECT *”?- Innodb
EN

Stack Overflow用户
提问于 2017-04-19 02:53:03
回答 1查看 51关注 0票数 0

我今天在想这个问题...

例如,如果我有一个包含20个字段的innodb表,100K的rows....how,内存中充满了这两个不同的查询:

代码语言:javascript
复制
1) SELECT field1, field2, field3 from table where field10 = '1';

2) Select * from table where field10 = '1';

在这两种情况下,内存是否都填满了整个表?在填充innodb_buffer_pool时,如何考虑where?

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 04:44:46

如果您的field10已编入索引,InnoDB只需读取索引即可查找具有该值的行。然后,它需要读取表中包含这些行的页面。它不需要读取整个表。

这就是索引的好处。

如果索引还包括field1field2field3,那么InnoDB可以跳过从表中读取页面。它可以仅从索引中获取所需的值。

代码语言:javascript
复制
ALTER TABLE `table` ADD KEY (field10, field1, field2, field3);

有点像当你在电话簿中查找某人的名字时,你会发现他们的地址是一个“额外”字段。这本书不是按人的地址分类的,但你可以免费获得。

当您从索引中获取所需的列时,这称为覆盖索引,并且查询不必从表中读取整个行。

您可能会喜欢我的演示文稿https://www.slideshare.net/billkarwin/how-to-design-indexes-really

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43480080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档