日期:2014-05-16  浏览次数:20580 次

聚集索引与非聚集索引使用情况的疑问
动作描述 聚集索引 非聚集索引
列经常被分组、排序 √ √
返回某范围内的数据 √ ×
一个或极少不同值 × ×
小数目的不同值 √ ×
大数目的不同值 × √
频繁更新的列 × √
主、外键列 √ √
频繁修改索引列 × √

备注:聚集索引是及其高效的索引,它决定了数据的物理存储顺序

如上的描述,其中有三个我有点费解,分别是:一个或极少不同值、小数目的不同值、大数目的不同值

1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引
2、小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引
3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引

请问,我的理解哪里错了,还是这个描述有问题
------解决方案--------------------
1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引
重复值过多,会导致选择度低,所以必然是扫描操作,索引的效果不高,一般不在这些列上建索引。
2、小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引
这里如果非要建聚集索引,那主要就是维护数据而已,或者通过聚集索引的预排序来减少order by的开销。
3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引
聚集索引实际上就是表的本身,如果你需要查询的列很少,用聚集索引太浪费
------解决方案--------------------
这个你在哪里看到的?
------解决方案--------------------
引用:
Quote: 引用:

1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引
重复值过多,会导致选择度低,所以必然是扫描操作,索引的效果不高,一般不在这些列上建索引。
2、小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引
这里如果非要建聚集索引,那主要就是维护数据而已,或者通过聚集索引的预排序来减少order by的开销。
3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引
聚集索引实际上就是表的本身,如果你需要查询的列很少,用聚集索引太浪费


谢谢,但我觉得这样的解释太特例了吧,我也可以用不同的原因决定列即可以用聚集索引,也可以不用聚集索引

这里说的是概况,大部分情况都遵循这种原则,所以有疑问,还是这个东西本身是有问题的?
或者说我觉得你这个说法本身就有点问题,用不用聚集索引本身不是由这部分做主要决定依据的
------解决方案--------------------
结论是根据原理总结出来的,可能会适合大部分情况

不要拿结论回头去论证原理,因为这个结论是原理的充分条件,而非必要条件
------解决方案--------------------
可圈可点,可信度不高

引用:
Quote: 引用:

这个你在哪里看到的?


http://baike.baidu.com/link?url=wKB9Fe-CC3Kt39SjXbOXiOlS9PGM2CgVJP93ij3KEAo62T8552CDiwdcFarO0HPY

------解决方案--------------------
先了解索引结构,才能理解索引的用处。
------解决方案--------------------
对于页的研究,强烈推荐一个很好的工具:Internals Viewer for SQL Server,下载地址:http://internalsviewer.codeplex.com/。这是一个图形化的工具,可以通过图形化的界面来粗略了解区、页的情况,对于入门级别的读者来说相当有效,不过比较遗憾的是目前只支持到SQL Server 2008。
------解决方案--------------------
关键在于掌握聚集索引和非聚集索引的原理。然后你就知道什么时候该用什么索引比较合理了。
------解决方案--------------------
1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引
因为索引就是顺序,你只有一个或极少不同值,说明你这就没有顺序,建索引就没有意义了

2小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引
因为聚集索引就是物理顺序
大部分是相同的数据是物理顺序放在一起
就很容易找到了

3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引
这应该也可以用聚集索引吧
不过数据维护的时候开销大,动不动就要重新排序.