猿问

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

MySQLInnoDB存储引擎
当索引(二级)生效时,会先走二级索引,然后走聚簇索引找到数据
那如果索引不生效时,要做全表扫描时,还会走聚簇索引么?我理解的是会走,因为InnoDB的数据和聚簇索引是一体的
那如果Innodb的全表扫描会走聚簇索引的话,而MyISAM不走,那是不是走索引的比不走索引的要快呢?想知道InnoDB全表扫描时如何走聚簇索引的?
九州编程
浏览 296回答 2
2回答

SMILET

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

慕哥6287543

老铁,首先你要弄清楚什么是innodb,什么是myisam哦innodb表的数据本身就是聚集的,也就是说,表本身就是聚集索引,全表扫描,扫的就是当然就是聚集索引本身咯。myisam表是堆表,数据存储并不是根据主键聚集的。innodb走全表扫描,就是从聚集索引最左端叶子块一直往右遍历咯,跟全索引扫描差不多。而同样是全表扫描,innodb是不是比myisam快呢?我的理解是myisam比innodb快哦。因为对于同样的数据,由于存储引擎对数据的组织和存储原理不一样,myisam表是比innodb表小的,那么在数据块大小一定的情况,表小,也就说整个表的数据块数量少,所以全表扫描过程需要读取的数据块的IO就少了哦。一次IO是读一个数据块到bufferpool,而不是一行数据。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答