SQL Server where子句使用In()vs Wildcard

时间:2012-03-05 15:18:35

标签: sql-server tsql

查询A和查询B之间是否存在任何性能差异?

查询A

SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField LIKE '[1,m][6,e][n]%')

查询B

SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField IN ('16', 'Mens'))

1 个答案:

答案 0 :(得分:5)

第一个可能要慢得多。索引不能与LIKE一起使用,除非有一个常量前缀,例如LIKE 'foo%'。因此,第一个查询将需要表扫描。但是,第二个查询可以使用SomeField上的索引(如果有的话)。

第一个查询也会给出错误的结果,因为它匹配'1en'。