我在 SQL Server 2005 中有以下查询:
SELECT
PRODUCT_ID
FROM
PRODUCTS P
WHERE
SUPPLIER_ORGANIZATION_ID = 13225
AND ACTIVE_FLAG = 'Y'
AND CONTAINS(*, 'FORMSOF(Inflectional, "%clip%") ')
有趣的是,使用它会生成一个哈希匹配,而如果我使用不同的
SUPPLIER_ORGANIZATION_ID
(较旧的供应商),它使用合并连接。显然 Hash 比 Merge Join 慢得多。我不明白的是为什么会有不同,以及需要什么才能让它运行得更快?仅供引用,PRODUCTS 表中有大约 500 万条记录。 When supplier organization id is selected (13225), there are about 25000 products for that supplier.
提前致谢。
最佳答案
我会尝试使用 OPTIMIZE FOR Query Hint 以一种或另一种方式强制它。
SELECT
PRODUCT_ID
FROM
PRODUCTS P
WHERE
SUPPLIER_ORGANIZATION_ID = @Supplier_Organisation_Id
AND ACTIVE_FLAG = 'Y'
AND CONTAINS(*, 'FORMSOF(Inflectional, @Keywords) ')
OPTION (OPTIMIZE FOR (@Supplier_Organisation_Id = 1000 ))
另一件事是您的 STATISTICS 可能已过时,自动更新的临界点通常不够低,这意味着所选的查询计划可能不适合您的数据。我建议尝试更新 Products 表上的 STATISTICS,如果这是问题的一部分,可能会创建一个定期执行此操作的工作。
关于sql - 哈希联接出现在全文查询中 - SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/682969/