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')

Это может также использовать меньше параметров в "где" пункт, например:

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 в производстве.

5
задан OMG Ponies 28 March 2010 в 06:16
поделиться

2 ответа

Чтобы сделать многое для LIKE , где шаблон имеет форму '% XXX%' , вам нужно найти возможности полнотекстового индексирования SQL Server и использовать СОДЕРЖИТ вместо КАК . Как есть, вы выполняете полное сканирование таблицы, потому что обычный индекс не поможет при поиске элемента, который начинается с подстановочного знака, а полнотекстовый индекс поможет.

/* ... */
 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')
10
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: