Ahm*_*tun 4 sql sql-server search stored-procedures sql-like
我有一个存储过程来执行记录搜索.
问题是来自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
Run Code Online (Sandbox Code Playgroud)
关于最佳的,使用索引的执行计划 - 没有.前缀通配符可防止使用索引,从而导致扫描.
如果你在搜索词的末尾也没有通配符,那么这个场景可以进行优化 - 我在一段时间后发布了博客:优化通配符前缀LIKE条件
更新
澄清我的观点:
LIKE'Something%' - 能够使用索引
LIKE'%Something' - 无法使用开箱即用的索引.但是你可以通过遵循我链接的"REVERSE技术"来优化它以允许它使用索引.
LIKE'%Something%' - 无法使用索引.没有什么可以优化LIKE.