优化GUID列

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

对不起我的英语不好;在我们的SQL Server 2014项目中,我们有两个在Web应用程序和Android设备之间同步的表(因此它们位于所有移动设备上)。

在我们的数据库中,这两个表由integer类型的唯一标识符作为主键标识,但我们还想要一个“跟随”其创建数据的GUID单列。

我们的表A包含以下列:

A_ID int
A_guid nvarchar (50)

和DetailA表:

detailA_ID int
detailA_guid nvarchar (50)
A_guid nvarchar (50) (on mobile only)

GUID列用于移动应用程序,并在SQL服务器上同步,“详细信息”数据将查找与“A_guid”对应的SQL Server ID:

select A_ID 
from A 
where A_guid = detailA.A_guid

我们所有数据都通过SQL Server凭据链接在它们之间。当然,只要数据很少,一切都有效。 “GUID”很快就会花一点时间。我们所有的GUID列都采用以下格式:

DEVICE_ID-YYYMMDD- [Function NEWID ()]

申请索引不是很有效。我想改变格式对应于:

DEVICE_ID-YYYMMDD_HIS

但我不知道我们是否会获得速度。

sql sql-server performance tsql guid
2个回答
0
投票

正如我的伙伴所说,如果你想使用GUID,那么使用uniqueidentifier这是SQL Server中已知的数据类型。

如果GUID不足以满足您的要求,但您需要了解更多信息。我建议创建一个非正式的表,它将所有必需的信息保存在具有相应GUID的单独列中。这比使用其他值混合字符串中的GUID更好。

所以而不是做:DEVICE_ID-YYYMMDD- [Function NEWID ()]

你会做得更好:INSERT INTO informationTable (DeviceId, CreatedDate, RecordGUID)


0
投票

根据定义,GUID(全局唯一标识符)是唯一的,您不需要在guid列中包含DEVICE_ID。如果您需要该数据,请将其单独存储在自己的列中。正如评论中所提到的,这将允许您使用uniqueidentifier数据类型,这将稍微提高性能。当然,在guid列上构建一个索引,它会比没有索引快得多!

(我不确定_HIS指的是什么,但添加额外的字符不会让事情变得更快。)

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