Медленный запрос SQL, включающий CONTAINS и OR

У нас возникла проблема, и мы надеялись, что хорошие ребята из Stack Overflow могут помочь нам с этим. . Мы работаем с SQL Server 2008 R2, и у нас возникают проблемы с запросом, выполнение которого занимает очень много времени для умеренного набора данных, около 100000 строк. Мы используем CONTAINS для поиска в файлах xml и LIKE в другом столбце для поддержки ведущих подстановочных знаков.

Мы воспроизвели проблему с помощью следующего небольшого запроса, выполнение которого занимает около 35 секунд:

SELECT something FROM table1 
WHERE (CONTAINS(TextColumn, '"WhatEver"') OR  
        DescriptionColumn LIKE '%WhatEver%')

План запроса:

Slow query

Если мы изменим приведенный выше запрос на использование UNION, время выполнения упадет с 35 секунд до <1 секунды. Мы бы не хотели использовать этот подход для решения проблемы.

SELECT something FROM table1 WHERE (CONTAINS(TextColumn, '"WhatEver"') 
UNION
(SELECT something FROM table1 WHERE (DescriptionColumn LIKE '%WhatEver%'))

План запроса:

Fast query

Столбец, который мы используем CONTAINS для поиска, представляет собой столбец с типом image и состоит из файлов xml размером от 1 до 20 КБ. по размеру.

У нас нет хороших теорий относительно того, почему первый запрос такой медленный, поэтому мы надеялись, что кто-то здесь найдет что-то мудрое, чтобы сказать по этому поводу. Насколько мы можем судить, в планах запросов нет ничего необычного. Мы также перестроили индексы и статистику.

Есть ли что-нибудь явно очевидное, что мы здесь упускаем?

Заранее благодарим за уделенное время!

10
задан Tilfeldig 30 June 2011 в 12:35
поделиться