在SQL Server 2014中将Guid用作PK

时间:2018-09-05 22:18:14

标签: sql-server sql-server-2014

晚上好

我们从servicenow导入数据。传入的键是GUID,但是将数据库设置为将列用作nvarchar(),但是将sysid列连接到其他表(也存储为nvarchar()但没有绘制的关系)时,查询时间可能非常慢。

除非我进行大量索引编制,否则大多数报告运行缓慢或永远不会返回任何结果。我不想过度索引数据库并冒空间用尽的风险。是否建议在所有表中将nvarchar列转换为guid?会破裂吗? (已加载的问题)

谢谢。

1 个答案:

答案 0 :(得分:4)

这取决于。

将类型从nvarchar更改为GUID会减小主键下索引的大小(因为您将不再需要UNICODE),但是在不知道其他索引的情况下,很难评估对性能的影响。不过,一般来说,最好的做法是使您的类型与数据相匹配。

请注意,如果PK是集群的(这是默认设置),则每个后续索引都将包括该列。聚集索引越窄,后续索引越窄。此外,在GUID上进行群集会导致所有索引的大量碎片化(如果GUID是非顺序的)。在开始进行更改之前,您可能需要确保已进行维护以减少碎片并根据需要更新统计信息。

即使将PK保留在原处(例如,插入日期的列),您可能仍想查看另一列是否更适合于集群。