堆上的非聚集索引和聚集索引上的非聚集索引哪个效率高

kidbuu 2015-10-24 09:58:02
据我所知,聚集索引上的非聚集索引叶级是聚集索引键,而堆上的非聚集索引叶级是行地址,总感觉后者更直接也更快,不过我想微软在设计 聚集索引上的非聚集索引 的时候没有在叶级上放行地址自然有他的道理,但是一直没能想明白,求大神指教
...全文
131 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2015-10-26
  • 打赏
  • 举报
回复
设计的时候,应该有考虑。
kidbuu 2015-10-25
  • 打赏
  • 举报
回复
引用 1 楼 x_wy46 的回复:
当没有聚集索引的时候,使用物理地址,也就是RID来做书签查找。而当表中存在聚集索引,就使用聚集索引键了 因为表中没有聚集索引的时候,不需要表中数据有序,所以这个RID几乎很少变动 而使用了聚集索引,表中数据的物理位置因为需要保证按聚集索引建有序,所以对应的RID会频繁变动,如果你非聚集索引指向的是RID的话,那非聚集索引不得没事天天变。这回造成很大的性能问题。
首先我觉得你说的很有道理,不过只有这一个原因吗,假如有一张历史数据表,或者能保证聚集索引键递增,那就没有RID经常变动的问题,这种情况下用RID是不是比聚集索引键更快。如果是的话,微软没有给我们选择是不是因为担心有些用户会乱用导致性能下降,还是说有其他原因让他们觉得用RID还是不如用聚集索引键。
专注or全面 2015-10-25
  • 打赏
  • 举报
回复
当没有聚集索引的时候,使用物理地址,也就是RID来做书签查找。而当表中存在聚集索引,就使用聚集索引键了 因为表中没有聚集索引的时候,不需要表中数据有序,所以这个RID几乎很少变动 而使用了聚集索引,表中数据的物理位置因为需要保证按聚集索引建有序,所以对应的RID会频繁变动,如果你非聚集索引指向的是RID的话,那非聚集索引不得没事天天变。这回造成很大的性能问题。
专注or全面 2015-10-25
  • 打赏
  • 举报
回复
引用 2 楼 kidbuu 的回复:
[quote=引用 1 楼 x_wy46 的回复:] 当没有聚集索引的时候,使用物理地址,也就是RID来做书签查找。而当表中存在聚集索引,就使用聚集索引键了 因为表中没有聚集索引的时候,不需要表中数据有序,所以这个RID几乎很少变动 而使用了聚集索引,表中数据的物理位置因为需要保证按聚集索引建有序,所以对应的RID会频繁变动,如果你非聚集索引指向的是RID的话,那非聚集索引不得没事天天变。这回造成很大的性能问题。
首先我觉得你说的很有道理,不过只有这一个原因吗,假如有一张历史数据表,或者能保证聚集索引键递增,那就没有RID经常变动的问题,这种情况下用RID是不是比聚集索引键更快。如果是的话,微软没有给我们选择是不是因为担心有些用户会乱用导致性能下降,还是说有其他原因让他们觉得用RID还是不如用聚集索引键。[/quote] 你说的只是一种假想,即便是说设置一个递增的列做聚集索引,保证记录的物理位置尽可能的不移动, 但是,如果有索引碎片整理,重建(重组)索引等操作时,记录的物理位置还是会发生变化的,好似乎有点强词夺理了,呵呵。 意思就是这个道理了

22,301

社区成员

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

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