У нас есть веб-приложение, которое позволяет клиентам управлять большими списками имен. Для поиска в этих списках мы используем FTS для SQL Server 2008, которая обычно работает хорошо. Наш крупнейший клиент имеет 900 000 имен и имеет время поиска менее секунды.
Однако для другого нового клиента я недавно импортировал 150 000 имен, и производительность ужасна (как, например, изнурительно ужасно для сервера). Я проверил полнотекстовый индексатор, и он утверждает, что недавно завершил сканирование.
Глядя на планы выполнения, я замечаю, что в быстром случае (для более крупного клиента) SQL Server сначала выполняет FTS, а затем выполняет поиск индекса по результату. Для более нового клиента сначала выполняется поиск по индексу (по-видимому, 150 000 раз для новых записей), а затем FTS.
Итак, я попробовал подсказку WITH (INDEX (MyFullTextIndex)), но SQL Server говорит, что индекс не существует. Очевидно, он не считает эти индексы FTS «реальными». Как я могу заставить SQL Server всегда сначала использовать FTS?
ОБНОВЛЕНИЕ: я попытался восстановить статистику, но безрезультатно. Те же проблемы с производительностью.
Вот планы выполнения:
БЫСТРАЯ производительность:
http://frameaction.com/LLExecutionPlan01.sqlplan
МЕДЛЕННАЯ производительность:
http://frameaction.com/LLExecutionPlan18.sqlplan