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

时间:2010-03-28 06:09:52

标签: sql sql-server sql-server-2005

我有一个查询,使用带有通配符的“like”搜索客户端。例如:

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].[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].[CLIENTINDICATOR] = 'ON')

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

2 个答案:

答案 0 :(得分:8)

要为模式具有LIKE格式的'%XXX%'做很多事情,您需要查找SQL Server的全文索引功能,并使用CONTAINS代替{{1} }}。按原样,你正在进行全表扫描,因为普通索引无法帮助搜索以通配符开头的项目 - 但是全文索引会出现。

LIKE

答案 1 :(得分:-1)