sql - 哈希联接出现在全文查询中 - SQL Server 2005

标签 sql sql-server-2005 indexing full-text-search

我在 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/

相关文章:

sql - 从 SQL 数据库中获取 Scala 中的一个值

asp.net - 在不输入任何内容的情况下模拟数据库中的记录

sql - 从具有特定值的表中获取列名

Mysql Order by 子句使用 "FileSort"

sql - 为什么这两个查询的性能差异如此之大?

mysql - 删除前导空格

sql - DB2:使用选择插入,每次插入时为每一个新行增加一列?

sql-server - 在 SQL Server 中查找锁定的表

java - 我在尝试获取索引处的字符时遇到问题

mongodb - 有什么简单的方法可以判断 mongodb 索引是否仍在使用?