暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL中的clustered索引为什么特别

今天聊聊MySQL中的clustered index,它是InnoDB用来组织和存储数据的一种结构,它并不仅仅是一个索引,而是对数据的物理存储方式的一种描述。

InnoDB中的数据是以B+ tree形式存储的,每张表默认都会有一个索引,这就是聚集索引,它由表中的主键负责创建。

聚集索引中,每个节点都是一个page(InnoDB存储数据的最小单位),node存储key值和指向子节点的指针,叶子节点存储原始数据和附近节点的指针。

这样设计的好处是什么呢?

表按照clustered index的key排序,相近的node互相指针相连:

  • 关系比较近的资料会在同一个page中,所以可能读取一个page,就能拿到所有数据,比如上图7和8对应的key就在一个node中
  • range query查询比较快,不用整个tree扫描,只要找到最小key所在的node,然后根据指针一致找到next node就可以了,比如上图5-10对应key的值。

既然clustered index的key值会影响range query、page空间使用率、插入的效率,所以设计一个恰当的clustered index很重要:

  • primary key存在,则clustered index就是它
  • primary key不存在,选第一个NOT NULL的唯一索引
  • 两个都没有,则选择一个隐藏的字段(自增值)作为clustered index

clustered index和第二索引关系很大,后面会介绍下!

文章转载自虞大胆的叽叽喳喳,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论