SQL Server:如何优化“喜欢”查询?

前端之家收集整理的这篇文章主要介绍了SQL Server:如何优化“喜欢”查询?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个查询,使用通配符“喜欢”搜索客户端.例如:
SELECT TOP (10) 
       [t0].[CLIENTNUMBER],[t0].[FIRSTNAME],[t0].[LASTNAME],[t0].[MI],[t0].[MDOCNUMBER]
  FROM [dbo].[CLIENT] AS [t0]
 WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') 
   AND ([t0].[FIRSTNAME] LIKE '%John%') 
   AND ([t0].[LASTNAME] LIKE '%Smith%') 
   AND ([t0].[SSN] LIKE '%123%') 
   AND ([t0].[CLIENTNUMBER] LIKE '%123%') 
   AND ([t0].[MDOCNUMBER] LIKE '%123%') 
   AND ([t0].[CLIENTINDICATOR] = 'ON')

它还可以在“where”子句中使用较少的参数,例如:

SELECT TOP (10) 
       [t0].[CLIENTNUMBER],[t0].[MDOCNUMBER]
  FROM [dbo].[CLIENT] AS [t0]
 WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') 
   AND ([t0].[FIRSTNAME] LIKE '%John%') 
   AND ([t0].[CLIENTINDICATOR] = 'ON')

任何人都能说出优化此类查询性能的最佳方法是什么?也许我需要创建一个索引?该表在生产中最多可以有1000K记录.

解决方法

要为模式具有“%XXX%”形式的LIKE做很多事情,您需要查找sql Server的全文索引功能,并使用CONTAINS而不是LIKE.原样,你正在进行全表扫描,因为普通索引无法帮助搜索通配符开头的项目 – 但是全文索引会.
/* ... */
 WHERE (LTRIM(RTRIM([t0].[DOCREVNO])) = '0') 
   AND (contains([t0].[FIRSTNAME],'John')) 
   AND (contains([t0].[LASTNAME],'Smith')) 
   AND (contains([t0].[SSN],'123'))
   AND (contains([t0].[CLIENTNUMBER],'123')) 
   AND (contains([t0].[MDOCNUMBER],'123')) 
   AND ([t0].[CLIENTINDICATOR] = 'ON')
原文链接:https://www.f2er.com/mssql/79808.html

猜你在找的MsSQL相关文章