我有一个存储过程,它对记录执行搜索。
问题是一些来自 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
关于最佳的、使用索引的执行计划 - 不。前缀通配符会阻止使用索引,从而导致扫描。
如果您的搜索词末尾也没有通配符,那么可以优化该场景 - 我不久前在博客中发表过:优化通配符前缀 LIKE 条件 http://www.adathedev.co.uk/2010/05/optimising-like-conditions-with.html
Update
为了澄清我的观点:
LIKE 'Something%' - 能够使用索引
LIKE '%Something' - 无法使用开箱即用的索引。但是您可以对其进行优化,以允许它通过遵循我链接到的“REVERSE technology”来使用索引。
LIKE '%Something%' - 无法使用索引。您无法对 LIKE 进行优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)