SQL: LIKE 与 OR 对比 IN
SQL: LIKE with OR vs IN
以下有性能差异吗?
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
VS
NAME IN (ACTUAL_VALUE_1,ACTUAL_VALUE_2,.., ACTUAL_VALUE_N)
您可以简单地尝试使用
NAME LIKE '%EXPRESSION_%'
就性能而言,IN 比 OR 相对更快。您还可以使用两个查询的执行计划来确认性能。
同样如上所述,您显示的两个查询是不同的。
第一个查询:
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
将尝试获取具有样本数据的结果,例如
EXPRESSION_123
XXXEXPRESSION_1234
EXPRESSION_2323
EXPRESSION_2......
而您的第二个查询将匹配与
完全匹配的记录
ACTUAL_VALUE_1,ACTUAL_VALUE_2.....
IN
版本可能要快得多。
两个版本不是做同样的事情。但是,如果满足您的需求,IN
版本可以利用 NAME
上的索引。 LIKE
版本不能,因为模式以通配符开头。
你可以这样写:
WHERE NAME LIKE 'EXPRESSION_%'
如果这满足您的需要,它还可以利用 NAME
上的索引。
如果您正在使用可以根据给定参数更改的变量表达式。然后使用
declare @Expression1 varchar(50)
Set @Expression2 = '%'+ @Expression1 +'%'
NAME LIKE @Expression2
所以@Expression1 中的任何参数都会自动处理。
以下有性能差异吗?
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
VS
NAME IN (ACTUAL_VALUE_1,ACTUAL_VALUE_2,.., ACTUAL_VALUE_N)
您可以简单地尝试使用
NAME LIKE '%EXPRESSION_%'
就性能而言,IN 比 OR 相对更快。您还可以使用两个查询的执行计划来确认性能。
同样如上所述,您显示的两个查询是不同的。
第一个查询:
NAME LIKE '%EXPRESSION_1%'
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'
将尝试获取具有样本数据的结果,例如
EXPRESSION_123
XXXEXPRESSION_1234
EXPRESSION_2323
EXPRESSION_2......
而您的第二个查询将匹配与
完全匹配的记录ACTUAL_VALUE_1,ACTUAL_VALUE_2.....
IN
版本可能要快得多。
两个版本不是做同样的事情。但是,如果满足您的需求,IN
版本可以利用 NAME
上的索引。 LIKE
版本不能,因为模式以通配符开头。
你可以这样写:
WHERE NAME LIKE 'EXPRESSION_%'
如果这满足您的需要,它还可以利用 NAME
上的索引。
如果您正在使用可以根据给定参数更改的变量表达式。然后使用
declare @Expression1 varchar(50)
Set @Expression2 = '%'+ @Expression1 +'%'
NAME LIKE @Expression2
所以@Expression1 中的任何参数都会自动处理。