Как заставить SQL Server обрабатывать предложения CONTAINS перед предложениями WHERE?

У меня есть запрос SQL, в котором используются как стандартные предложения WHERE, так и предложения CONTAINS полнотекстового индекса. Запрос создается динамически из кода и включает переменное количество предложений WHERE и CONTAINS.

Для того, чтобы запрос был быстрым, очень важно, чтобы поиск по полнотекстовому индексу выполнялся до применения остальных критериев.

Однако SQL Server решает обрабатывать предложения WHERE перед предложениями CONTAINS и это вызывает сканирование таблиц, и запрос выполняется очень медленно.

Я могу переписать это, используя два запроса и временную таблицу. Когда я это делаю, запрос выполняется в 10 раз быстрее. Но я не хочу делать это в коде, который создает запрос, потому что он слишком сложен.

Есть ли способ заставить SQL Server обрабатывать CONTAINS раньше всего? Я не могу форсировать план (ИСПОЛЬЗОВАТЬ ПЛАН), потому что запрос строится динамически и сильно различается.

Примечание: у меня такая же проблема на SQL Server 2005 и SQL Server 2008.

6
задан Sylvain 22 June 2011 в 12:48
поделиться