为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2019-04-27 22:14:29
MySQLInnoDB存储引擎当索引(二级)生效时,会先走二级索引,然后走聚簇索引找到数据那如果索引不生效时,要做全表扫描时,还会走聚簇索引么?我理解的是会走,因为InnoDB的数据和聚簇索引是一体的那如果Innodb的全表扫描会走聚簇索引的话,而MyISAM不走,那是不是走索引的比不走索引的要快呢?想知道InnoDB全表扫描时如何走聚簇索引的?
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

首先要明确的是,聚簇索引不是一种单独的索引类型,而是一种数据存储方式,各个引擎的实现可能不太一样。
对于InnoDB而言,如果表有聚簇索引,它的数据行数据实际上就存放在主键索引的叶子页中。也就是说,可以直接通过主键索引获取到行数据。这就是InnoDB的聚簇索引。
对于题主的描述1、在有聚簇索引时,二级索引生效后,实际上是通过二级索引找到对应主键,然后通过主键索引找到存放的数据。2、索引不生效,用不到主键索引,就不会使用主键上聚簇的行数据。3、不使用任何索引,走全表扫描的话,理论上来讲,如果表有1000行数据,都需要1000次IO操作,也就不用比较谁快谁慢了。
如有疑惑,欢迎进一步探讨,望采纳!
                            
查看完整回答
反对 回复 2019-04-27
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

老铁,首先你要弄清楚什么是innodb,什么是myisam哦innodb表的数据本身就是聚集的,也就是说,表本身就是聚集索引,全表扫描,扫的就是当然就是聚集索引本身咯。myisam表是堆表,数据存储并不是根据主键聚集的。
innodb走全表扫描,就是从聚集索引最左端叶子块一直往右遍历咯,跟全索引扫描差不多。
而同样是全表扫描,innodb是不是比myisam快呢?我的理解是myisam比innodb快哦。因为对于同样的数据,由于存储引擎对数据的组织和存储原理不一样,myisam表是比innodb表小的,那么在数据块大小一定的情况,表小,也就说整个表的数据块数量少,所以全表扫描过程需要读取的数据块的IO就少了哦。一次IO是读一个数据块到bufferpool,而不是一行数据。
                            
查看完整回答
反对 回复 2019-04-27
  • 2 回答
  • 0 关注
  • 295 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信