sql - 优化多列 LIKE SQL 查询的一些最佳实践是什么?

标签 sql search optimization sql-like

我有一个正在继承并尝试优化的搜索查询。我很想知道是否有人对此有任何最佳实践和建议。生产服务器仍然是 SQL Server 2000。

该查询是一个高级客户搜索存储过程,它接受 5 个不同的搜索条件参数(即名字、姓氏、地址、电话等)来搜索数百万条记录表。所有连接的列和 WHERE 子句中的列都有索引。此外,初始查询将记录转储到用于分页容量的表变量中。

INSERT INTO   @tempCustTable (CustomerID, FirstName, LastName, City, StateProvince, Zip, PhoneNumber)
SELECT  DISTINCT cu.CustomerID, cu.FirstName, cu.LastName, a.City,
a.StateProvince, a.Zip, p.PhoneNumber
FROM Customer cu WITH(NOLOCK)
LEFT OUTER JOIN Address a WITH(NOLOCK) ON cu.CustomerID = a.CustomerID
LEFT OUTER JOIN Phone p WITH(NOLOCK) ON cu.CustomerID = p.CustomerID
WHERE  (cu.LastName = @LastName OR cu.LastName LIKE @LastName + '%') 
AND (@FirstName IS NULL OR cu.FirstName = @FirstName OR cu.FirstName LIKE @FirstName + '%')
AND (@StateProvince = '' OR a.StateProvince LIKE @StateProvince)
AND (@City = '' OR a.City LIKE @City + '%')
AND (@Zip = '' OR a.Zip = @Zip OR a.Zip LIKE @Zip + '%')
ORDER BY cu.LastName, cu.FirstName

有人对我如何提高查询性能有任何建议吗?

最佳答案

这不是整行

AND (@Zip = '' OR a.Zip = @Zip OR a.Zip LIKE @Zip + '%')

和这个一样

AND (a.Zip LIKE @Zip + '%')

当然

AND (a.Zip LIKE @Zip + '%')

一样
a.Zip = @Zip OR a.Zip LIKE @Zip + '%'

关于sql - 优化多列 LIKE SQL 查询的一些最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/473218/

相关文章:

azure - 我可以为目标字段输入 "Exact Search"并在其他字段中搜索吗?

c# - 复制不支持复制功能的动态对象的最快方法

c++ - 为什么我的 Strassen 矩阵乘法很慢?

sql - 如何在sql中添加小计行

sql - 如何使用cte查询和解析相邻列表层次结构?

mysql - 如何为我的网站帖子实现查看系统?

ios - NSnotification 中心不工作 iOS

mysql - Solr 索引 mysql 和搜索

java - 改进子集解决方案

sql - 使用列名称对 UnPivoted 数据进行 SP 或函数