Mysql--序列2--聚簇索引&非聚簇索引

xiaoxiao2021-02-28  43

而MySQL作为一个开源的数据库,在各大互联网公司使用极为普遍。本系列将从Mysql开始,一步步展示关于存储设计的诸多策略。

说到InnoDB和MyISAM的区别,很多人都会提到一个支持事务,一个不支持;一个是行锁,一个是表锁(这个其实不准确,后面会详细阐述)。

但跟日常使用最密切相关的,更基本的,其实是另外一个关键区别:InnoDB是聚簇索引,MyISAM是非聚簇索引。如下图所示:

MyISAM的非聚餐索引:数据和索引是分开存放的 

InnoDB的聚簇索引: 数据和主键索引是存放在一起的,其他索引叶子结点存放的主键id。 

那这种不同,对于我们日常使用,又有什么影响呢?

查询

很显然,对于MyISAM,要查2次,先查1次索引,再查一次数据; 而对于InnoDB的主键查询,因为数据和索引存放在一起,只需要查1次,显然性能更快。

所以如果你采用了InnoDB,尽量让上层业务通过主键查询。

插入

对于MyISAM,数据总是顺序在文件末尾添加;而对于InnoDB,如果主键是自增ID,那数据也会是在文件末尾按顺序append。

但如果你用了InnoDB,但主键又不是自增,那就会发生B+树中间叶子结点的split,对应的,就会发生文件的随机读写,而不是顺序写入,这会极大的影响性能。

所以,如果你采用了InnoDB,尽量把主键设成自增ID。

转自:https://blog.csdn.net/ahjxhy2010/article/details/53809386

转载请注明原文地址: https://www.6miu.com/read-2625340.html

最新回复(0)