查詢A和查詢B之間是否存在任何性能差異?SQL Server Where子句使用In()vs Wildcard
查詢
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField LIKE '[1,m][6,e][n]%')
查詢乙
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField IN ('16', 'Mens'))
查詢A和查詢B之間是否存在任何性能差異?SQL Server Where子句使用In()vs Wildcard
查詢
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField LIKE '[1,m][6,e][n]%')
查詢乙
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField IN ('16', 'Mens'))
第一可能是慢得多。除非有一個固定的前綴,否則索引不能與LIKE
一起使用,例如LIKE 'foo%'
。第一個查詢將因此需要表掃描。然而,第二個查詢可以使用SomeField
上的索引(如果有)。
第一個查詢也會給出錯誤的結果,因爲它與'1en'匹配。
首先,它們不是等價的。 – 2012-03-05 15:21:13
爲什麼你用1 = 1? – vulkanino 2012-03-05 15:22:00
@vulkanino:看到這裏:http://stackoverflow.com/questions/242822/why-would-someone-use-where-1-1-and-conditions-in-a-sql-條款 – 2012-03-05 16:31:25