聚集索引与非聚集索引使用情况的疑问

soldierluo 2014-04-01 12:00:25
动作描述 聚集索引 非聚集索引
列经常被分组、排序 √ √
返回某范围内的数据 √ ×
一个或极少不同值 × ×
小数目的不同值 √ ×
大数目的不同值 × √
频繁更新的列 × √
主、外键列 √ √
频繁修改索引列 × √

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

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

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

请问,我的理解哪里错了,还是这个描述有问题
...全文
270 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-04-01
  • 打赏
  • 举报
回复
引用 2 楼 soldierluo 的回复:
[quote=引用 1 楼 DBA_Huangzj 的回复:] 1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引 重复值过多,会导致选择度低,所以必然是扫描操作,索引的效果不高,一般不在这些列上建索引。 2、小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引 这里如果非要建聚集索引,那主要就是维护数据而已,或者通过聚集索引的预排序来减少order by的开销。 3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引 聚集索引实际上就是表的本身,如果你需要查询的列很少,用聚集索引太浪费
、 谢谢,但我觉得这样的解释太特例了吧,我也可以用不同的原因决定列即可以用聚集索引,也可以不用聚集索引 这里说的是概况,大部分情况都遵循这种原则,所以有疑问,还是这个东西本身是有问题的?[/quote]或者说我觉得你这个说法本身就有点问题,用不用聚集索引本身不是由这部分做主要决定依据的
--小F-- 2014-04-01
  • 打赏
  • 举报
回复
这个你在哪里看到的?
soldierluo 2014-04-01
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引 重复值过多,会导致选择度低,所以必然是扫描操作,索引的效果不高,一般不在这些列上建索引。 2、小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引 这里如果非要建聚集索引,那主要就是维护数据而已,或者通过聚集索引的预排序来减少order by的开销。 3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引 聚集索引实际上就是表的本身,如果你需要查询的列很少,用聚集索引太浪费
、 谢谢,但我觉得这样的解释太特例了吧,我也可以用不同的原因决定列即可以用聚集索引,也可以不用聚集索引 这里说的是概况,大部分情况都遵循这种原则,所以有疑问,还是这个东西本身是有问题的?
發糞塗牆 2014-04-01
  • 打赏
  • 举报
回复
1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引 重复值过多,会导致选择度低,所以必然是扫描操作,索引的效果不高,一般不在这些列上建索引。 2、小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引 这里如果非要建聚集索引,那主要就是维护数据而已,或者通过聚集索引的预排序来减少order by的开销。 3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引 聚集索引实际上就是表的本身,如果你需要查询的列很少,用聚集索引太浪费
giftzheng 2014-04-01
  • 打赏
  • 举报
回复
1、一个或极少不同值,应该说的是记录中的数据大部分是相同的,所以不使用索引 因为索引就是顺序,你只有一个或极少不同值,说明你这就没有顺序,建索引就没有意义了 2小数目的不同值,说的是也应该是大部分是相同的,但这里为什么使用聚集索引 因为聚集索引就是物理顺序 大部分是相同的数据是物理顺序放在一起 就很容易找到了 3、大数目的不同值,说的应该是大部分是不同的,这里为什么又不使用聚集索引 这应该也可以用聚集索引吧 不过数据维护的时候开销大,动不动就要重新排序.
--小F-- 2014-04-01
  • 打赏
  • 举报
回复
关键在于掌握聚集索引和非聚集索引的原理。然后你就知道什么时候该用什么索引比较合理了。
發糞塗牆 2014-04-01
  • 打赏
  • 举报
回复
对于页的研究,强烈推荐一个很好的工具:Internals Viewer for SQL Server,下载地址:http://internalsviewer.codeplex.com/。这是一个图形化的工具,可以通过图形化的界面来粗略了解区、页的情况,对于入门级别的读者来说相当有效,不过比较遗憾的是目前只支持到SQL Server 2008。
發糞塗牆 2014-04-01
  • 打赏
  • 举报
回复
先了解索引结构,才能理解索引的用处。
soldierluo 2014-04-01
  • 打赏
  • 举报
回复
我也是越看越糊涂,所以好的方法还是从聚集索引的特性入手,需求复合其特性就用,否则就不用
發糞塗牆 2014-04-01
  • 打赏
  • 举报
回复
可圈可点,可信度不高
引用 6 楼 soldierluo 的回复:
[quote=引用 3 楼 fredrickhu 的回复:] 这个你在哪里看到的?
http://baike.baidu.com/link?url=wKB9Fe-CC3Kt39SjXbOXiOlS9PGM2CgVJP93ij3KEAo62T8552CDiwdcFarO0HPY[/quote]
soldierluo 2014-04-01
  • 打赏
  • 举报
回复
引用 3 楼 fredrickhu 的回复:
这个你在哪里看到的?
http://baike.baidu.com/link?url=wKB9Fe-CC3Kt39SjXbOXiOlS9PGM2CgVJP93ij3KEAo62T8552CDiwdcFarO0HPY
专注or全面 2014-04-01
  • 打赏
  • 举报
回复
结论是根据原理总结出来的,可能会适合大部分情况 不要拿结论回头去论证原理,因为这个结论是原理的充分条件,而非必要条件

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧