在 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 个字节的值来构建索引,这是一个非常快速的操作。
在我们的应用程序中,我们根据一些计算在单个 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 个字节的值来构建索引,这是一个非常快速的操作。