MySQL InnoDB的主键索引和非主键索引的查找过程,主键自增索引的优势

  • WordPress创意 2021年11月9日, 14:47:51
  • 分类: MySQL
  • 浏览:676

【MySQL InnoDB的主键索引和非主键索引的查找过程】
以下图为一张表的数据:

现在ID为主键索引,k为非主键索引,在表中的结构如下:

左边R代表一整行的值。主键索引和非主键索引的区别是:
非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。

根据这两种结构我们来进行以下查询,看看他们在查询中有什么区别:
1.select * from table where ID = 100,就是主键查询的方式,那只需要搜索ID的索引树。
2.select * from table where k = 1,就是非主键的查询方式,那先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程就是回表。

【主键自增索引的优势】
下面左图是主键自增索引的结构。
下面右图是插入ID=650的一行数据的情况下,可以直接在最右边的位置插入数据:

如果主键不是自增的,插入的是ID=350的一行数据,因为B+树是有序的,那么需要将下面的叶子节点进行移动,腾出位置来插入ID=350的数据,这样就会比较消耗时间,如果刚好R4这一行数据所在的数据页已经满了,那么需要进行页分裂的操作,这样就会比较糟糕。
而如果主键是自增的,每次插入的ID都会比前面的大,那么每次只需要在后面插入就可以,不需要移动位置、分裂等操作,这样就会提高性能。

参考:https://blog.csdn.net/weixin_39871562/article/details/113467755

上一页:
下一页:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注