SQL Server 2008 Полнотекстовый поиск - МЕДЛЕННО - PullRequest
1 голос
/ 02 ноября 2010

Я использую asp.net с SQL Server 2008 SP2

У меня есть одна таблица с включенным полнотекстовым поиском.

Мое оборудование: четырехъядерный 2 ГГц, 4 ГБ ОЗУ, жесткий диск SAS.

Таблица содержит около 5 миллионов записей , и ее структура:

Pages table:

ID (INT)
GroupID (INT)
GroupStart (bit)
Col1 varchar(900)
Col2 nvarchar(450)
Col3 nvarchar(450)
Col4 nvarchar(450)
Col5 nvarchar(450)

У меня есть индекс fts для идентификатора первичного ключа.

Я использую следующий запрос для поиска в таблице:

SELECT * FROM (  
SELECT * , ROW_NUMBER()  OVER(  ORDER BY  KEY_TBL.Rank DESC  ) AS RowNumber , COUNT(*) OVER() as TotalRows  
FROM Pages p  
INNER JOIN  
CONTAINSTABLE(Pages, *,N' FORMSOF (INFLECTIONAL, movies)') AS KEY_TBL  
ON p.ID = KEY_TBL.[KEY]  
WHERE  (p.GroupID IS NULL OR p.GroupStart = 1) 
) LS  
WHERE RowNumber BETWEEN 0 AND 10  
ORDER BY RowNumber ASC;

Запрос занимает , если общее количество строк составляет около 500.

и занимает 5 с для завершения, если общее количество строк составляет около 10000.

и занимает 60 с для завершения, если общее количество строк составляет около 100 000.

Есть идеи, почему запрос занимает так много времени?

Что-то не так в моем запросе, на сервере sql или это аппаратная проблема?

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

Рассмотрим ограничение количества совпадений, возвращаемых функцией CONTAINSTABLE -> CONTAINSTABLE(Pages, *,N' FORMSOF (INFLECTIONAL, movies)', 100 )

1 голос
/ 04 ноября 2010

Полнотекстовый поиск полезен только для поиска текста внутри varchar или текстовых полей, он не будет ускорять запросы.Для этого вам нужно добавить в таблицу больше индексов.

В общем случае запрос кажется слишком сложным, но вы еще не объяснили, что должен делать запрос.Я думаю, что запрос должен быть оптимизирован.

...