如何强制SQL Server在WHERE子句之前处理CONTAINS子句?

Syl*_*ain 6 sql-server query-optimization

我有一个SQL查询,它使用标准的WHERE子句和全文索引CONTAINS子句.查询是从代码动态构建的,包含可变数量的WHERE和CONTAINS子句.

为了使查询更快,在应用其余条件之前搜索全文索引非常重要.

但是,SQL Server选择在CONTAINS子句之前处理WHERE子句,这会导致表扫描并且查询非常慢.

我可以使用两个查询和一个临时表重写它.当我这样做时,查询执行速度提高了10倍.但我不想在创建查询的代码中这样做,因为它太复杂了.

有没有办法强制SQL Server在其他任何事情之前处理CONTAINS?我无法强制执行计划(USE PLAN),因为查询是动态构建的,并且变化很大.

注意:我在SQL Server 2005和SQL Server 2008上遇到同样的问题.

Tud*_*tin 0

尝试使用 2 个没有临时表的查询来执行此操作:

SELECT * 
FROM table
WHERE id IN (
    SELECT id 
    FROM table 
    WHERE contains_criterias
) 
AND further_where_classes
Run Code Online (Sandbox Code Playgroud)