回答

收藏

在现有表上将newid()更改为newsequentialid()

技术问答 技术问答 273 人阅读 | 0 人回复 | 2023-09-14

目前,我们有许多在主键上使用newid()的表。这导致大量碎片。因此,我想更改该列以使用newsequentialid()代替。7 {" s9 u/ Z# M+ x* ~/ G( i2 t! N
我想现有的数据将保持零散的状态,而新的数据将减少零碎的状态。这意味着我也许应该等待一段时间才能将PK索引从非群集更改为群集。
7 u$ v3 M6 m4 C' ?& g! ^我的问题是,有没有人有这样做的经验?有什么我应该忽略的地方吗?
) p/ d* R# {8 _4 q# ?4 q# i                . _) ]  |" b% {) w  o
解决方案:, [0 k! x& y- V; ~3 G
               
9 j3 _5 i% b- A6 G) r  l8 Y
3 J4 W+ j3 |9 k8 Q5 A+ \
( U" z1 i1 d( I$ ^: g' j9 E7 I7 j                如果您切换到顺序向导 并同时 重新组织索引一次,则将消除碎片。我不明白为什么您只想等到碎片化的页面链接连续不断地重新排列自己。
6 c2 ~! y, ?1 j% t话虽这么说,您是否做过任何测量来表明碎片实际上正在影响您的系统?只是在寻找一个索引,看到“被分段75%”并 不能, Y+ r& m! g5 a* A& F) m( a4 q
意味着存取时间受到影响。还有更多因素在起作用(缓冲池页面的预期寿命,读写速率,顺序操作的局部性,操作的并发性等)。从向导切换到顺序向导通常是安全的,但您仍然可能会遇到问题。例如,您可以看到针对插入密集型OLTP系统的页面闩锁争用,因为它会创建一个热点页面,在该页面上积累了插入内容。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则