我从外部源到本地datamart使用此表:
我在EFGuid上做了一个GroupBy /计数,我得到了:
所以我假设表的创建者(在这个外部源上)通过创建它作为uniqueidentifier犯了一个错误?或者有理由选择这样的数据类型吗?
两个问题:
我会使用这些数据,因此我当然不需要uniqueidentifier
数据类型,只需选择nvarchar(320)
来存储它就可以吗?
此外部来源是否会因挑选uniqueIdentifier
而不是nvarchar
而导致性能下降?
答案 0 :(得分:2)
按UNIQUEIDENTIFIER
或NVARCHAR(320)
分组或过滤的速度比INT
慢(让我们说)。 UNIQUEIDENTIFIER
为CHAR(36)
:
SELECT LEN(NEWID())
所以,你也不需要NVARCHAR(320)
。毕竟,这取决于您将如何处理数据,但您可以使用以下列创建一个单独的表:
[InteralEFID] INT IDENTITY(100, 1)
[EFGuid] UNIQUEIDENTIFIER
因此,当您执行迁移时,您可以使用新的INT
列。这肯定会减小表的大小,并可以提高各种操作的性能。您可以保留新表(EFID< - > EFGuid映射)以供将来导入,或者出于某种原因需要获取某些EF GUID
的{{1}}。