Sql server SQL Server where子句使用In()与通配符

Sql server SQL Server where子句使用In()与通配符,sql-server,tsql,Sql Server,Tsql,查询A和查询B之间有性能差异吗 询问 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')) 第一种可能要慢得多。索引不能与LIKE一起使用,除非有一个常量前缀,例如LIKE'foo%。因此,第一个查询将需要表扫描。但是,第二个查询可以使用SomeFiel

查询A和查询B之间有性能差异吗

询问

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'))

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


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

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


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

首先,它们是不等价的。@vulkanino:请看这里:首先,它们是不等价的。@vulkanino:请看这里:@Mark:优化器难道不应该足够聪明地意识到像“Q[a-b]”这样的
c可以使用索引吗?因为它与
c-LIKE'Qa%'或c-LIKE'Qb%'一样
?我猜优化器只会在类似'Q[a-b]'中使用Q的索引。@Mark:优化器难道不应该足够聪明地意识到
c-LIKE'Q[a-b]'可以使用索引吗?因为它与
c类似于'Qa%'或c类似于'Qb%'
?我猜优化器只会在'Q[a-b]'中使用Q的索引。