【发布时间】:2019-09-10 00:28:17
【问题描述】:
对不起我的英语;在我们的 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 server上同步,“detail”数据会查找“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
但我不知道我们是否会加快速度。
【问题讨论】:
-
速度是为了什么?
-
你读过这篇文章吗? stackoverflow.com/questions/13803326/…
-
如果要存储 GUID,为什么要使用 varchar(50)?您应该使用 uniqueidentifier。
-
GUID 已经是全局唯一的(根据名称);添加设备 ID 和日期不会为您带来任何好处。您最好将其拆分为单独的列(根据 Sean,
UNIQUEIDENTIFIER用于 GUID),然后您可以索引这些列。如果您需要该值的单个字符串表示,则可以使用计算列,但您实际上并不需要它。如果您有一种方法可以为每个设备实际生成一个不断增加的唯一值(例如精确到毫秒的时间戳),那么该值的索引会比 GUID 更好,因此您可能根本不需要它。
标签: sql sql-server performance tsql guid