聚集索引和非聚集索引的区别

本文详细解释了聚集索引和非聚集索引的区别,包括它们在InnoDB引擎中的存储方式、优缺点,以及主键对数据存储的影响。强调了使用自增ID作为主键以优化性能的重要性,同时指出InnoDB中仅支持一个聚集索引以避免磁盘空间浪费。
摘要由CSDN通过智能技术生成

区别:

聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。优势与缺点:

聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快。

聚集索引就是基于主键创建的索引,除了主键索引以外的其他索引,
称为非聚集索引,也叫做二级索引。
由于在 InnoDB 引擎里面,一张表的数据对应的物理文件本身就是按照 B+ 树来
组织的一种索引结构,而聚集索引就是按照每张表的主键来构建一颗 B+ 树,然
后叶子节点里面存储了这个表的每一行数据记录。
所以基于 InnoDB 这样的特性,聚集索引并不仅仅是一种索引类型,还代表着一
种数据的存储方式。
同时也意味着每个表里面必须要有一个主键,如果没有主键, InnoDB 会默认选
择或者添加一个隐藏列作为主键索引来存储这个表的数据行。一般情况是建议使
用自增 id 作为主键,这样的话 id 本身具有连续性使得对应的数据也会按照顺序
跟着Mic学架构 存储在磁盘上,写入性能和检索性能都很高。否则,如果使用 uuid 这种随机 id
那么在频繁插入数据的时候,就会导致随机磁盘 IO ,从而导致性能较低。
需要注意的是, InnoDB 里面只能存在一个聚集索引,原因很简单,如果存在多
个聚集索引,那么意味着这个表里面的数据存在多个副本,造成磁盘空间的浪费,
以及数据维护的困难。
由于在 InnoDB 里面,主键索引表示的是一种数据存储结构,所以如果是基于非
聚集索引来查询一条完整的记录,最终还是需要访问主键索引来检索。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小帅kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值