gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:06:14 24 4
gpt4 key购买 nike

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

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

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

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

有没有办法强制 SQL Server 在执行其他操作之前先处理 CONTAINS?我无法强制执行计划(使用计划),因为查询是动态构建的并且变化很大。

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

最佳答案

您可以像这样向优化器表明您的意图

SELECT
*
FROM
(
SELECT *
FROM


WHERE
CONTAINS
) T1
WHERE
(normal conditions)

但是,SQL 是声明性的:您说的是您想要什么,而不是说如何做。因此优化器可能决定忽略上面的嵌套。

您可以在应用经典 WHERE 子句之前强制具体化包含 CONTAINS 的派生表。我不保证性能。

SELECT
*
FROM
(
SELECT TOP 2000000000
*
FROM
....
WHERE
CONTAINS
ORDER BY
SomeID
) T1
WHERE
(normal conditions)

关于sql-server - 如何强制SQL Server在WHERE子句之前处理CONTAINS子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6440109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com