InnoDB全表扫描是不是有可能比MyISAM快?

发布于 2022-09-11 19:24:23 字数 228 浏览 15 评论 0

MySQL InnoDB存储引擎

当索引(二级)生效时, 会先走二级索引, 然后走聚簇索引找到数据

那如果索引不生效时, 要做全表扫描时, 还会走 聚簇索引 么?
我理解的是会走, 因为InnoDB的数据和聚簇索引是一体的

那如果Innodb的全表扫描会走聚簇索引的话, 而 MyISAM 不走, 那是不是走索引的比不走索引的要快呢?
想知道InnoDB全表扫描时如何走聚簇索引的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苍景流年 2022-09-18 19:24:23

首先要明确的是,聚簇索引不是一种单独的索引类型,而是一种数据存储方式,各个引擎的实现可能不太一样。

对于 InnoDB 而言,如果表有聚簇索引,它的数据行数据实际上就存放在主键索引的叶子页中。也就是说,可以直接通过主键索引获取到行数据。这就是 InnoDB 的聚簇索引。

对于题主的描述
1、在有聚簇索引时,二级索引生效后,实际上是通过二级索引找到对应主键,然后通过主键索引找到存放的数据。
2、索引不生效,用不到主键索引,就不会使用主键上聚簇的行数据。
3、不使用任何索引,走全表扫描的话,理论上来讲,如果表有 1000 行数据,都需要 1000 次 IO 操作,也就不用比较谁快谁慢了。

如有疑惑,欢迎进一步探讨,望采纳!

青柠芒果 2022-09-18 19:24:23

老铁,首先你要弄清楚什么是innodb,什么是myisam哦
innodb表的数据本身就是聚集的,也就是说,表本身就是聚集索引,全表扫描,扫的就是当然就是聚集索引本身咯。
myisam表是堆表,数据存储并不是根据主键聚集的。

innodb走全表扫描,就是从聚集索引最左端叶子块一直往右遍历咯,跟全索引扫描差不多。

而同样是全表扫描,innodb是不是比myisam快呢?我的理解是myisam比innodb快哦。
因为对于同样的数据,由于存储引擎对数据的组织和存储原理不一样,myisam表是比innodb表小的,那么在数据块大小一定的情况,表小,也就说整个表的数据块数量少,所以全表扫描过程需要读取的数据块的IO就少了哦。一次IO是读一个数据块到buffer pool,而不是一行数据。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文