如何在不進行表掃描的情況下在 SQLServer 表中搜索唯一識別符號 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 以確保安全嗎?
uj5u.com熱心網友回復:
這個
SELECT * FROM dbo.Product
where productGuid = '321F6C1D-3B28-4880-B1ED-434D7AE299D8'
很好,因為 UNIQUEIDENTIFIER 的資料型別優先級高于 VARCHAR。因此 VARCHAR 文字被轉換為 UNIQUEIDENTIFIER 并且可以使用索引。
您必須注意的情況是文字或引數的優先級高于表列,這會導致所有列值都轉換為文字或引數型別進行比較,并且(通常*)會阻止索引使用.
*在某些特殊情況下,比較會避免列側轉換。
uj5u.com熱心網友回復:
如果以這種格式(GUID 格式)使用它,正確的方法是:
SELECT * FROM dbo.Product
WHERE productGuid = CAST('321F6C1D-3B28-4880-B1ED-434D7AE299D8' AS UNIQUEIDENTIFER)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360898.html
標籤:爪哇 sql-server 查询语句 索引 jdbc模板
