我有一个存储过程,对记录执行搜索。
问题是来自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(’%%’)查询,因为这意味着没有可比较的内容?
该声明是 不真实的 ,因为那里 的 东西比较。以下是等效的
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全文引擎。