是什么

  1. 了解这个问题,需要先了解 innobd 和 myisam 先。这两个是数据库的实现引擎,其中 innodb 是比较新的,myisam 是 5.5 之前用的,双方各自有各自的优点。详情请看

问题解答(需要对于 innodb 和 myisam 有一定的理解才看得懂)

为什么 myisam 查询比 innodb 快?
主要原因有三点:

  1. 查询的时候,由于 innodb 支持事务,所以会有 mvvc 的一个比较。这个过程会损耗性能。
  2. 查询的时候,如果走了索引,而索引又不是主键索引,此时,由于 innodb 是聚簇索引,会有一个回表的过程,即:先去非聚簇索引树(非主键索引树)中查询数据,找到数据对应的 key 之后,再通过 key 回表到聚簇索引树,最后找到需要的数据。而 myisam 是非聚集索引,而且叶子节点存储的是磁盘地址,所以,查询的时候查到的最后结果不是聚簇索引树的 key,而是会直接去查询磁盘。详解
  3. 锁的一个损耗,innodb 锁支持行锁,在检查锁的时候不仅检查表锁,还要看行锁。

参考

  1. innodb 的优点