查询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