作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我今天在想这个问题......
例如,如果我有一个包含 20 个字段、100K 行的 innodb 表......内存如何填充这两个不同的查询:
1) SELECT field1, field2, field3 from table where field10 = '1';
2) Select * from table where field10 = '1';
在这两种情况下,内存是否都填满了整个表?innodb_buffer_pool填满时如何考虑where?
最佳答案
如果您的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
关于Mysql- "SELECT field "确实将内存填充为 "SELECT * "吗? - 因诺数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43480080/
我正在尝试为我的应用执行“部署:冷”。 git repo 是本地的我的部署服务器(即我只有一台服务器用于所有内容,而且我不要在 github 上托管我的代码)。 这是成绩单(出于隐私考虑,将我的应用名
我是一名优秀的程序员,十分优秀!