重复uniqueidentifier的原因?

时间:2017-04-28 10:31:35

标签: sql-server uniqueidentifier sqldatatypes

我从外部源到本地datamart使用此表:

enter image description here

我在EFGuid上做了一个GroupBy /计数,我得到了:

enter image description here

所以我假设表的创建者(在这个外部源上)通过创建它作为uniqueidentifier犯了一个错误?或者有理由选择这样的数据类型吗?

两个问题:

  • 我会使用这些数据,因此我当然不需要uniqueidentifier数据类型,只需选择nvarchar(320)来存储它就可以吗?

  • 此外部来源是否会因挑选uniqueIdentifier而不是nvarchar而导致性能下降?

1 个答案:

答案 0 :(得分:2)

UNIQUEIDENTIFIERNVARCHAR(320)分组或过滤的速度比INT慢(让我们说)。 UNIQUEIDENTIFIERCHAR(36)

SELECT LEN(NEWID())

所以,你也不需要NVARCHAR(320)。毕竟,这取决于您将如何处理数据,但您可以使用以下列创建一个单独的表:

[InteralEFID] INT IDENTITY(100, 1)
[EFGuid] UNIQUEIDENTIFIER

因此,当您执行迁移时,您可以使用新的INT列。这肯定会减小表的大小,并可以提高各种操作的性能。您可以保留新表(EFID< - > EFGuid映射)以供将来导入,或者出于某种原因需要获取某些EF GUID的{​​{1}}。