在 WHERE 子句中使用 GUID - 性能?

Using a GUID in a WHERE clause - Performance?

在我们的应用程序中,我们根据一些计算在单个 table 中创建了很多行。由于行的数量,我们使用 .Net 应用程序中的 BULK INSERT 来快速写入行。

但是,我们需要知道在 BULK INSERT 调用中写入了哪些 ID。因此,我们的想法是生成一个 GUID,并将其添加到批量更新中写入的每一行。因此 GUID 会保留在 table.

如果我们需要查看写入了哪些行,我们可以SELECT .. FROM TABLE ... WHERE SessionID =我们生成的 guid。

我在 table 上有一个名为 SessionID 的列(例如),VARCHAR(50) NOT NULL,Indexed。

这是acceptable设计吗?

您应该创建类型为 'uniqueidentifier' 的列,该列用于存储 GUID 值。在内部,它会将其存储为 16 字节(128 位)整数,而不是您要使用的慢得多的字符串。

性能应该非常好,因为您只是比较 16 个字节的值来构建索引,这是一个非常快速的操作。