Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Производительность FTS запроса (CONTAINS)  [new]
Benetton
Member

Откуда: Taganrog
Сообщений: 531
Есть запрос, работающий 11 секунд:

SELECT TOP 3 * 
FROM PAGES
WHERE TYPE = 'L' 
AND ENABLED = 'Y' 
AND INDEXABLE = 'Y' 
AND KEYWORDS != 'manager'
AND CONTAINS(KEYWORDS, '"manager"') 
AND LOCATION != 'london'
AND CONTAINS(LOCATION, '"london"') 
ORDER BY RESULTS DESC 

На полях KEYWORDS & LOCATION есть FTS индекс (недавно прошедший full population).
Если в запросе закомментировать любую из строк:
AND CONTAINS(KEYWORDS, '"manager"') 
AND CONTAINS(LOCATION, '"london"') 

то запрос выполняется 1 сек (при этом используется тот же самый FTS индекс) и разница в планах исполнения составляет всего одну ветку с "Remote Scan".
Сервер SQL 2005 SP2, размер FTS каталога всего лишь 2МБ, в таблице PAGES только 180т. строк.

Вопрос - как заставить запрос работать быстро?
23 июл 09, 18:37    [7453316]     Ответить | Цитировать Сообщить модератору
 Re: Производительность FTS запроса (CONTAINS)  [new]
Benetton
Member

Откуда: Taganrog
Сообщений: 531
Up, ответов нет)
24 июл 09, 14:13    [7456637]     Ответить | Цитировать Сообщить модератору
 Re: Производительность FTS запроса (CONTAINS)  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Benetton
Up, ответов нет)


каталог 2mb - это просто ничего, он не должен тормозить до такой степени.
1. Сколько там элементво и уникальных ключей?
2. сколько записей в результате полного запроса и в результате запроса с одним убранным критерием?
3. как работают такие запросы?

SELECT  * 
FROM PAGES
WHERE 
CONTAINS(KEYWORDS, '"manager"') 
AND CONTAINS(LOCATION, '"london"') 
ORDER BY RESULTS DESC 

SELECT * 
FROM PAGES
WHERE 
CONTAINS(KEYWORDS, '"manager"') 
ORDER BY RESULTS DESC 

SELECT * 
FROM PAGES
WHERE 
CONTAINS(LOCATION, '"london"') 
ORDER BY RESULTS DESC 
24 июл 09, 14:27    [7456786]     Ответить | Цитировать Сообщить модератору
 Re: Производительность FTS запроса (CONTAINS)  [new]
Benetton
Member

Откуда: Taganrog
Сообщений: 531
1. Около 3500 уникальных строк по каждому из полей KEYWORDS & LOCATION

2. 700 записей - если убрать TOP 3; с любым из закомментированных критерием 5+ тысяч строк (выбирается за 0 секунд)

3. Все запросы - 0 секунд!

4. ГЛАВНОЕ: если убрать top 3, план запроса резко меняется, и он срабатывает мгновенно.

to Winnipuh - спасибо огромное за подсказку, копаю в сторону разных планов исполнения
24 июл 09, 15:54    [7457699]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить