InnoDB全表扫描是不是有可能比MyISAM快?
MySQL InnoDB存储引擎
当索引(二级)生效时, 会先走二级索引, 然后走聚簇索引找到数据
那如果索引不生效时, 要做全表扫描时, 还会走 聚簇索引 么?
我理解的是会走, 因为InnoDB的数据和聚簇索引是一体的
那如果Innodb的全表扫描会走聚簇索引的话, 而 MyISAM 不走, 那是不是走索引的比不走索引的要快呢?
想知道InnoDB全表扫描时如何走聚簇索引的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先要明确的是,聚簇索引不是一种单独的索引类型,而是一种数据存储方式,各个引擎的实现可能不太一样。
对于 InnoDB 而言,如果表有聚簇索引,它的数据行数据实际上就存放在主键索引的叶子页中。也就是说,可以直接通过主键索引获取到行数据。这就是 InnoDB 的聚簇索引。
对于题主的描述
1、在有聚簇索引时,二级索引生效后,实际上是通过二级索引找到对应主键,然后通过主键索引找到存放的数据。
2、索引不生效,用不到主键索引,就不会使用主键上聚簇的行数据。
3、不使用任何索引,走全表扫描的话,理论上来讲,如果表有 1000 行数据,都需要 1000 次 IO 操作,也就不用比较谁快谁慢了。
如有疑惑,欢迎进一步探讨,望采纳!
老铁,首先你要弄清楚什么是innodb,什么是myisam哦
innodb表的数据本身就是聚集的,也就是说,表本身就是聚集索引,全表扫描,扫的就是当然就是聚集索引本身咯。
myisam表是堆表,数据存储并不是根据主键聚集的。
innodb走全表扫描,就是从聚集索引最左端叶子块一直往右遍历咯,跟全索引扫描差不多。
而同样是全表扫描,innodb是不是比myisam快呢?我的理解是myisam比innodb快哦。
因为对于同样的数据,由于存储引擎对数据的组织和存储原理不一样,myisam表是比innodb表小的,那么在数据块大小一定的情况,表小,也就说整个表的数据块数量少,所以全表扫描过程需要读取的数据块的IO就少了哦。一次IO是读一个数据块到buffer pool,而不是一行数据。