我精通SQL server性能,但我不得不反驳GUID应该用作Clusterd主键的默认类型的想法。
假设该表每天的插入量相当低(5000 +/-行/天),我们会遇到什么样的性能问题?页面拆分将如何影响我们的seek性能?我应该多久重建一次索引(或者我应该整理一次碎片整理)?我应该将填充因子设置为多少(100、90、80等)?
如果我每天插入1,000,000行会怎么样?
我为所有的问题道歉,但我希望得到一些支持,因为我没有使用GUID作为我们的默认PKs。然而,我完全愿意让来自StackOverflow用户群的强大知识改变我的想法。
发布于 2009-09-24 04:00:51
如果你正在做任何类型的卷,GUID作为PK是非常糟糕的,除非你使用sequential GUIDs,原因和你描述的完全一样。Page fragmentation is severe
Average Average
Fragmentation Fragment Fragment Page Average
Type in Percent Count Size Count Space Used
id 4.35 7 16.43 115 99.89
newidguid 98.77 162 1 162 70.90
newsequentualid 4.35 7 16.43 115 99.89正如GUID和整数之间的this comparison所示:
Test1导致了大量的页面拆分,当我在插入完成后运行DBCC SHOWCONTIG时,扫描密度约为12%。Test2工作台具有约98%扫描密度
但是,如果你的音量很低,那就没什么关系了。
如果您确实需要一个全局惟一的ID,但是有大量的内容(并且不能使用顺序ID),那么只需将GUID放在一个索引列中即可。
发布于 2009-09-24 03:58:34
使用GUID作为主键的缺点:
优势:
的两个不同数据源之间连接数据时,
我认为决定是否使用GUID非常简单,但可能我没有意识到其他问题。
发布于 2009-09-24 04:00:45
由于每天的插入次数如此之少,我怀疑页面拆分是否应该是一个重要的因素。真正的问题是,5000与现有的行数相比如何,因为这将是决定适当的初始填充因子以推迟拆分所需的主要信息。
也就是说,我个人并不是GUID的狂热粉丝。我知道它们在某些情况下可以很好地服务,但在许多情况下,它们只是效率的“拦路虎”,易用性,……
我发现以下问题有助于确定是否应该使用GUID。
,
https://stackoverflow.com/questions/1469674
复制相似问题