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 中的任何参数都会自动处理。