原本是想写关于SQL数据优化方面的文章的,现在网上看了下, 被“误入歧途”到关于:聚集索引和非聚集索引的区别上,遂研究了下,看懂了不少,现写下来,记录下
聚集索引:聚集索引既然名字中有个“聚集”,说明突出在“聚集”两个字上。可以比较形象的说成是一个词典的拼音索引,比如我要查:东方的“东”字,但是我不知道东字怎么写,这时比较快捷的方法就是,直接根据拼音“
dong”来查到大概是哪一页开始的,然后再找。这个“拼音的索引”就相当于“聚集索引”。
非聚集索引:但也可能是这种情况,我只知道他是怎么写的,但是不知道怎么念,这时我们会根据字的部首来查这个字,如部首“∕”,那你可能查到的是“年”,也可能是“爱”,可能是“受”,这样你查询的结果就相当零散和不连续,效率就十分低下,这就是“非聚集索引”
下面来说下官方的说法:
聚集索引:
一种索引,该索引中键值的
逻辑顺序决定了表中相应行的物理顺序。
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,按姓氏排列数据。
由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
适用情况
1
、含有大量非重复值的列。
2
、使用BETWEEN,>,>=,<或<=返回一个范围值的列
3
、被连续访问的列
4
、返回大型结果集的查询
5
、经常被使用连接或GROUP BY子句的查询访问的列
下面的表总结了何时使用聚集索引或
非聚集索引:
动作描述 |
使用聚集索引 |
使用非聚集索引 |
列经常被分组排序 |
应 |
应 |
返回某范围内的数据 |
应 |
不应 |
一个或极少不同值 |
不应 |
不应 |
小数目的不同值 |
应 |
不应 |
大数目的不同值 |
不应 |
应 |
频繁更新的列 |
不应 |
应 |
外键列 |
应 |
应 |
主键列 |
应 |
应 |
频繁修改索引列 |
不应 |
应 |