签到成功

知道了

CNDBA社区CNDBA社区

MYSQL 聚簇索引 和 主键索引 说明

2021-08-23 11:14 1644 0 转载 MySQL
作者: dave

1 聚簇索引和主键索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式,具体细节依赖于其实现方式。

MySQL数据库中innodb存储引擎,B+树索引可以分为:

  1. 聚簇索引(也称聚集索引,clustered index)
  2. 辅助索引(有时也称非聚簇索引或二级索引,secondary index,non-clustered index)。

这两种索引内部都是B+树,聚集索引的叶子节点存放着一整行的数据。

http://www.cndba.cn/dave/article/4684

InnoDB聚簇索引和主键索引

http://www.cndba.cn/dave/article/4684

  1. Innodb中的主键索引是一种聚簇索引,
  2. 非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。

InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构。聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分。

http://www.cndba.cn/dave/article/4684

一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。

http://www.cndba.cn/dave/article/4684

日常使用时,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了需找主键索引的二级索引,现在找到主键索引再通过主键索引找数据。http://www.cndba.cn/dave/article/4684

Innodb通过主键聚集数据,如果没有定义主键,innodb会选择【非空】的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。

2 聚簇索引的优缺点

优点:http://www.cndba.cn/dave/article/4684

  1. 数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快
  2. 聚簇索引对于主键的排序查找和范围查找速度非常快

缺点:

  1. 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键
  2. 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般【定义主键为不可更新】。
  3. 二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

3 辅助索引(非聚簇索引)

在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。

辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。

http://www.cndba.cn/dave/article/4684
http://www.cndba.cn/dave/article/4684

Innodb辅助索引的叶子节点并不包含行记录的全部数据,叶子节点除了包含键值外,还包含了相应行数据的聚簇索引键。http://www.cndba.cn/dave/article/4684

辅助索引的存在不影响数据在聚簇索引中的组织,所以一张表可以有多个辅助索引。在innodb中有时也称辅助索引为二级索引。

http://www.cndba.cn/dave/article/4684

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7971528次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ