一、概述
聚合索引:是索引结构和数据在一起存放的的索引。类似于字典的正文,当我们根据拼音就能够直接找到那个字。
非聚合索引:是索引结构和数据分开存放的索引,类似于根据偏旁部首查找字,首先找到该字的地址,然后根据地址找到这个字的信息。
二、区别及其优缺点
2.1区别
1、聚集索引一个表只能有一个,非聚集索引一个表可以有多个
2、聚集索引存储记录在物理上是连续的,非聚集索引是逻辑上连续的,物理上并不连续
3、聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。
4、非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。
5、索引是通过二叉树数据结构来描述的
聚集索引:叶子结点就是数据结点。
非聚集索引:叶子结点也是索引结点,只不过有一个指针指向对应的数据块。
2.2优缺点
聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快。
三、何时使用聚集索引或非聚集索引
动作描述 | 使用聚集索引 | 使用非聚集索引 |
---|---|---|
列经常被分组排序 | 应 | 应 |
返回某范围内的数据 | 应 | 不应 |
一个或极少不同值 | 不应 | 不应 |
小数目的不同值 | 应 | 不应 |
大数目的不同值 | 不应 | 应 |
频繁更新的列 | 不应 | 应 |
外键列 | 应 | 应 |
主键列 | 应 | 应 |
频繁修改索引列 | 不应 | 应 |
四、总结
1.使用聚集索引的查询效率要比非聚集索引的效率要高,但是如果需要频繁去改变聚集索引的值,写入性能并不高,因为需要移动对应数据的物理位置。
2.非聚集索引在查询的时候可以的话就避免二次查询,这样性能会大幅提升。
3.不是所有的表都适合建立索引,只有数据量大表才适合建立索引,且建立在选择性高的列上面性能会更好。
参考: