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

kidbuu 2015-10-24 09:58:02
据我所知,聚集索引上的非聚集索引叶级是聚集索引键,而堆上的非聚集索引叶级是行地址,总感觉后者更直接也更快,不过我想微软在设计 聚集索引上的非聚集索引 的时候没有在叶级上放行地址自然有他的道理,但是一直没能想明白,求大神指教
...全文
92 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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] 你说的只是一种假想,即便是说设置一个递增的列做聚集索引,保证记录的物理位置尽可能的不移动, 但是,如果有索引碎片整理,重建(重组)索引等操作时,记录的物理位置还是会发生变化的,好似乎有点强词夺理了,呵呵。 意思就是这个道理了
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-10-24 09:58
社区公告
暂无公告