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上遇到同样的问题.
尝试使用 2 个没有临时表的查询来执行此操作:
SELECT *
FROM table
WHERE id IN (
SELECT id
FROM table
WHERE contains_criterias
)
AND further_where_classes
Run Code Online (Sandbox Code Playgroud)