SQL Server:在 uniqueidentifier guid 上搜索位置

SQLServer: Search where on uniqueidentifier guid

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

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)

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

如果以这种格式(GUID 格式)使用它,正确的方法是:

SELECT * FROM dbo.Product
WHERE productGuid = CAST('321F6C1D-3B28-4880-B1ED-434D7AE299D8' AS UNIQUEIDENTIFER)

这个

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

很好,因为 UNIQUEIDENTIFIER 比 VARCHAR 具有更高的 Data Type Precedence。所以 VARCHAR 字面量被转换为 UNIQUEIDENTIFIER 并且可以使用索引。

需要注意的情况是字面量或参数的优先级高于table列,导致所有列值都转换为字面量或参数类型进行比较,并将(通常*)阻止索引使用。

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