SQLServer:在 uniqueidentifier guid 上搜索位置

mat*_*th5 2 java t-sql sql-server indexing jdbctemplate

如何在不进行表扫描的情况下在 SQLServer 表中搜索唯一标识符 guid?我应该只使用字符串还是强制转换作为唯一标识符?我在互联网上看到不同的例子。

SELECT * FROM dbo.Product
where productGuid = '321F6C1D-3B28-4880-B1ED-434D7AE299D8'

SELECT * FROM dbo.Product
where productGuid = cast('321F6C1D-3B28-4880-B1ED-434D7AE299D8' as uniqueidentifier)
Run Code Online (Sandbox Code Playgroud)

在进行文本字符串搜索时,我仍然在执行计划中看到搜索。由于我们使用的是 Java 和 JDBCTemplate,我是否应该将其强制转换为 uniqueidentifier 以确保安全?

Dav*_*oft 5

SELECT * FROM dbo.Product
where productGuid = '321F6C1D-3B28-4880-B1ED-434D7AE299D8'
Run Code Online (Sandbox Code Playgroud)

没问题,因为 UNIQUEIDENTIFIER 的数据类型优先级高于VARCHAR。因此 VARCHAR 文字被转换为 UNIQUEIDENTIFIER 并且可以使用索引。

您必须注意的情况是文字或参数的优先级高于表列,这会导致所有列值都转换为文字或参数类型以进行比较,并且(通常*)会阻止索引使用。

*在某些特殊情况下,比较会避免列端转换。