当前位置:网站首页>聚集索引和非聚集索引
聚集索引和非聚集索引
2022-08-09 14:59:00 【Small-K】
聚集索引和非聚集索引
一言以蔽之,聚集索引就是索引顺序和物理顺序一致的索引结构,非聚集索引是索引顺序与物理顺序不一致的索引结构。
他们之间的关系有点像数组和哈希表,数组的下标就是聚集索引,哈希表的键就是非聚集索引。
Mysql中,聚集索引和非聚集索引的底层结构都是B+树
聚集索引
mysql中,主键就是加了唯一性约束的聚集索引,如果我们在创建表的时候不显式指定主键,mysql会自动为我们选择一列作为主键。
聚集索引一张表只能有一个,这是因为聚集索引的索引顺序与物理排列顺序一致,而物理排列顺序只能有一个。当然我们可以删除现有的聚集索引而重新设置一个,但这样会造成数据的物理重排。
在聚集索引的底层B+树中,叶子节点存储的就是每一个记录的全部数据。
非聚集索引
非聚集索引的底层B+树中,叶子节点存储的是非聚集索引的索引列和聚集索引的索引列,然后会有一个字段指向实际的物理数据存储地址。
这就涉及到一个二次查询问题,当我们检索数据带上了非索引字段时,就不得不再去实际数据的物理存储地址取一次数据。
解决二次查询问题的方法就是为常需要同时检索的数据建立多重索引,且符合最左前缀匹配法则。
ps
具体的说明可参照下面的链接,已经非常细致了,上述只是自己简化的记忆。
参考资料:
[1] 聚集索引与非聚集索引的总结
边栏推荐
猜你喜欢
随机推荐
【Postgraduate Work Weekly】(Week 5)
MNIST数据集的训练(内附完整代码及其注释)
【SQL】175. 组合两个表
【剑指 Offer】 37. 序列化二叉树
【力扣】33. 搜索旋转排序数组
hugging face tutorial - Chinese translation - Loading pre-trained instances with AutoClass
基于MySQL的数据在线管理系统
【力扣】114. 二叉树展开为链表
深入浅出最优化(6) 最小二乘问题的特殊方法
【工具使用】Modbus Poll软件使用详解
规划问题的MATLAB求解——MATLAB在数学建模中的应用(第2版)
【Postgraduate Work Weekly】(The third week)
gccg++基本命令简介
配置 vscode 让它变得更好用
保存数据
【SQL】595. 大的国家
Visual Studio 2019新手使用(安装并创建第一个程序详细教程)
【工具使用】Keil软件包——知识宝藏库
数学规划模型
堆(heap)系列_0x03:堆块 + malloc/new底层 + LFH(WinDbg分析)