У нас была проблема, мы надеялись, что хорошие люди Qaru могут нам помочь. Были запущены SQL Server 2008 R2 и возникают проблемы с запросом, который занимает очень много времени для работы на умеренном наборе данных, около 100000 строк. Мы используем CONTAINS для поиска через xml файлы и LIKE в другом столбце для поддержки ведущих wild-карточек.
Мы воспроизвели проблему со следующим небольшим запросом, который занимает около 35 секунд:
SELECT something FROM table1
WHERE (CONTAINS(TextColumn, '"WhatEver"') OR
DescriptionColumn LIKE '%WhatEver%')
План запроса:
Если мы изменим запрос выше на использование UNION, время работы сократится с 35 секунд до < 1 секунда. Мы хотели бы избежать использования этого подхода для решения проблемы.
SELECT something FROM table1 WHERE (CONTAINS(TextColumn, '"WhatEver"')
UNION
(SELECT something FROM table1 WHERE (DescriptionColumn LIKE '%WhatEver%'))
План запроса:
Столбец, использующий CONTAINS для поиска, представляет собой столбец с типом изображения и состоит из xml файлов размером от 1 до 20 тысяч.
У нас нет хороших теорий относительно того, почему первый запрос настолько медленный, поэтому мы надеялись, что у кого-то здесь будет что-то мудрое сказать по этому вопросу. Планы запросов не показывают ничего необычного, насколько мы можем судить. Мы также перестроили индексы и статистику.
Есть ли что-то откровенно очевидное здесь?
Заранее благодарим за ваше время!