Я использую asp.net с SQL Server 2008 SP2SQL Server 2008 Полнотекстовый поиск - SLOW
У меня есть одна таблица с полнотекстовым поиском.
Мое оборудование: 2GHZ Quad-Core, 4GB RAM, SAS HDD.
В таблице имеет около 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 индекс первичного ключа ID.
Я использую следующий запрос для поиска в таблице:
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;
Запрос принимает 1s завершить, если общее число строк, составляет около 500.
и принимает 5s завершить, если всего строк - около 10000.
и принимает 60s, если полные ряды составляют около 100 000.
Любая идея, почему запрос занимает так много времени?
Есть ли что-то не так в моем запросе, sql-сервере или это проблема с оборудованием?
Вы смотрели на план запроса? Какой самый большой хит? Другие мысли: что произойдет, если вы уберете «COUNT (*) OVER()»; также, сколько времени занимает только «CONTAINSTABLE» (с ROW_NUMBER) - мне интересно, стоит ли соединение дорого. Множество переменных - сложно дать полный ответ ... –
thx для ответа. Я только что проверил это. удаление COUNT (*) OVER() отменяет запрос 60 секунд (из 100 000 результатов) на 3 с! – RuSh
Так что же мне делать дальше? count (*) over() занимает большую часть времени, чтобы улучшить это? – RuSh