优化 GUID 列

Optimize the GUID column

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

在我们的数据库中,这两个 table 由类型为 integer 的唯一标识符标识为主键,但我们还想要一个 GUID 单列 "follows" 创建时的数据。

我们的 table A 有这些列:

A_ID int
A_guid nvarchar (50)

和细节A table:

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

GUID 列用于移动应用程序并在 SQL 服务器上同步,"detail" 数据将查找与 "A_guid" 对应的 SQL 服务器 ID:

select A_ID 
from A 
where A_guid = detailA.A_guid

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

DEVICE_ID-YYYMMDD- [Function NEWID ()]

应用索引不是很有效。我考虑过更改格式以对应于 :

DEVICE_ID-YYYMMDD_HIS

不过不知道能不能提速。

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

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

正如我的朋友所说,如果你想使用 GUID,那么使用 uniqueidentifier 这是 SQL 服务器中的已知数据类型。

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

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

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