在SQL Server 2014中使用Guid作为PK

问题描述 投票:0回答:1

晚上好,

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

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

谢谢。

sql-server sql-server-2014
1个回答
4
投票

这取决于。

将类型从nvarchar更改为GUID应该会减小主键下面的索引大小(因为您将不再需要UNICODE),但是如果不知道您使用了哪些其他索引,则很难衡量对性能的影响。但是,一般情况下,最佳做法是使您的类型与您的数据匹配。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.