优化 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)
对不起我的英语;在我们的 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)