У нас возникла проблема, с которой мы надеялись, что хорошие люди из Stack Overflow могут нам помочь.Мы работаем с SQL Server 2008 R2 и у нас возникли проблемы с запросом, который занимает очень много времени для выполнения с умеренным набором данных, около 100000 строк.Мы используем CONTAINS для поиска в XML-файлах и LIKE в другом столбце для поддержки лидирующих подстановочных знаков.
Мы воспроизвели проблему с помощью следующего небольшого запроса, выполнение которого занимает около 35 секунд:
SELECT something FROM table1
WHERE (CONTAINS(TextColumn, '"WhatEver"') OR
DescriptionColumn LIKE '%WhatEver%')
План запроса:
Если вместо этого изменить запрос на использование UNION, время выполнения уменьшится с 35 секунд до <1 секунды.Мы хотели бы избежать использования этого подхода для решения этой проблемы. </p>
SELECT something FROM table1 WHERE (CONTAINS(TextColumn, '"WhatEver"')
UNION
(SELECT something FROM table1 WHERE (DescriptionColumn LIKE '%WhatEver%'))
План запроса:
Столбец, который мы используем СОДЕРЖИТ для поискаthrough - это столбец с изображением типа и состоит из xml-файлов размером от 1 до 20 000 *.
У нас нет хороших теорий относительно того, почему первый запрос такой медленный, поэтому мы надеялись, что кто-то здесь получит что-торазумно сказать по этому вопросу.Насколько мы можем судить, планы запросов не показывают ничего необычного.Мы также перестроили индексы и статистику.
Есть ли что-нибудь очевидное, что мы здесь упускаем?
Заранее спасибо за ваше время!