优化GUID列

时间:2019-04-19 19:22:34

标签: sql sql-server performance tsql guid

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

在我们的数据库中,这两个表由类型为integer的唯一标识符标识为主键,但是我们还希望有一个GUID单列,以“跟随”其创建后的数据。 / p>

我们的表A具有以下列:

A_ID int
A_guid nvarchar (50)

和明细表:

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

GUID列用于移动应用程序中,并且在SQL Server上同步时,“详细信息”数据将查找与“ 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

但是我不知道我们是否会提高速度。

2 个答案:

答案 0 :(得分:0)

由于顾名思义,GUID(全局唯一标识符)是唯一的,因此您无需在guid列中包括display:none;。如果需要该数据,请将其分别存储在其自己的列中。如注释中所述,这将允许您使用#header:hover { opacity: 0; z-index: -1; } 数据类型,这将稍微提高性能。绝对,在guid列上建立索引,这比没有索引要快得多!

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

答案 1 :(得分:0)

正如我的同伴所说,如果要使用GUID,请使用uniqueidentifier,这是SQL Server中的已知数据类型。

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

因此,而不是:DEVICE_ID-YYYMMDD- [Function NEWID ()]

您最好这样做:INSERT INTO informationTable (DeviceId, CreatedDate, RecordGUID)