存储过程 - 跨多列搜索参数

时间:2016-12-18 09:22:11

标签: sql-server sql-server-2016

我有以下查询可以很好地完成工作,但我想知道是否有更好的方法在WHERE子句中执行此操作。

任何有关改进的意见/反馈都将不胜感激。

SELECT
    C.ClientID, 
    C.FirstName + ' ' + C.LastName as FullName, 
    C.DOB,
    G.Gender, 
    G.GenderIcon, 
    C.VerificationCode, 
    MAX(V.StartDate) as LastVisitDate
FROM 
    Client C
LEFT JOIN 
    Visit V ON C.ClientID = V.ClientID
INNER JOIN 
    Gender G ON C.GenderID = G.GenderID
WHERE
    (FirstName like '%' + @Criteria + '%' or
     LastName like '%' + @Criteria + '%' or
     VerificationCode like '%' + @Criteria + '%')

1 个答案:

答案 0 :(得分:0)

除了查看全文搜索之外的事情,没有。如果一列比其他列更容易包含匹配并且您有覆盖索引,则可以使用三个查询并单独运行它们,但是如果返回的列,它们可能都涉及表扫描。您也可以考虑首先查询LIKE @Criteria + '%',因为这可以使用索引来支持有效的范围扫描(在任何情况下都比读取所有行更有效)。但是,这并没有改善最坏的情况。