![]() |
1
4
如果表上没有聚集索引,则将其存储为堆而不是b树。在SQLServer中,堆数据访问非常糟糕,因此您肯定需要添加聚集索引。
您是否有经常用于范围扫描的字段?哪些列用于联接?除了GUID之外,是否有一个列组合也唯一地标识行?发布一个数据模型的样本将有助于我们推荐一个很好的聚类候选者。 |
![]() |
2
2
NEWSEQUENTIALID() 在SQL Server中而不是 NEWID() 将帮助您避免插入过程中出现碎片问题。 关于聚集索引的选择,如Kimberly L。Tripp状态 here |
![]() |
3
1
我还不完全清楚:您的第一访问模式是按GUID还是按其他列查询表?当连接到其他表时,最常用的列(和数据类型)是什么? 在我进一步了解如何使用这些guid之前,我无法给出任何可靠的建议。我知道你说过它们是主键,但这并不能保证它们被用作查询或连接的主要条件。 更新
至于使用Guid.NewGuid(),看来你终究还是可以用C语言编写顺序guid的。我在这里找到了以下代码,所以:
newsequentialID()实际上只是UuidCreateSequential的包装器。我确信,如果您不能在客户机上直接使用它,您可以找到一种方法,快速往返服务器,从那里获得一个新的顺序id,甚至可以使用一个“分发器”表和一个存储过程来完成这项工作。 |
![]() |
4
0
您没有指出您的性能问题是什么。如果执行最差的操作是插入,那么您的解决方案可能是正确的。如果是其他原因,我会看看聚集索引是如何帮助实现的。 您可以查看表上现有的索引以及使用它们的查询。您可以选择一个索引,该索引虽然稍微降低了insert的性能,但为当前的性能问题领域提供了更大的好处。 |