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

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