一尘不染

SQL Server是否优化LIKE('%%')查询?

sql

我有一个存储过程,对记录执行搜索。

问题是来自UI的某些搜索条件可能是空字符串。因此,当未指定条件时,LIKE语句将变得多余。

如何有效执行该搜索或Sql Server?或者,由于它意味着没有可比较的内容,它是否优化了LIKE(’%%’)查询?

存储的过程是这样的:

ALTER PROC [FRA].[MCC_SEARCH]
@MCC_Code varchar(4),
@MCC_Desc nvarchar(50),
@Detail nvarchar(50)
AS
BEGIN             
       SELECT
             MCC_Code,
             MCC_Desc,
             CreateDate,
             CreatingUser

       FROM
              FRA.MCC (NOLOCK)
       WHERE
             MCC_Code LIKE ('%' + @MCC_Code + '%')
             AND MCC_Desc LIKE ('%' + @MCC_Desc + '%')
             AND Detail LIKE ('%' + @Detail + '%')
       ORDER BY MCC_Code

END

阅读 170

收藏
2021-05-30

共1个答案

一尘不染

简短的答案是- 长的答案是- 绝对不是

它是否优化了LIKE(’%%’)查询,因为这意味着没有可比较的内容?

该声明是 不真实的 ,因为那里 东西比较。以下是等效的

WHERE column LIKE '%%'
WHERE column IS NOT NULL

IS NOT NULL要求进行表扫描,除非该列中的非null值很少且索引正确。

编辑

资源动态搜索程序在SQL Server:
您只需 必须 阅读这篇文章的厄兰Sommarskog,SQL服务器MVP http://www.sommarskog.se/dyn-
search.html(选择你的版本,或同时读取)

否则,如果需要CONTAINS样式搜索上的良好性能,请考虑使用SQL Server全文引擎。

2021-05-30