0

我有一个查询,它对 3 个表进行内部连接。

SELECT DISTINCT A.ID, <OTHER 'A' FIELDS> 
FROM C 
LEFT JOIN B ON C.Bin_ID = B.Bin_ID 
LEFT JOIN A ON B.App_ID = A.App_ID  
WHERE
   ((A.App_NAME LIKE '%%') AND (B.App_ID IS NOT NULL))  
ORDER BY 
    A.App_NAME ASC

提到的表格中存在的数据->

  • 表 A:8000 行
  • 表 B:900000 行
  • 表 C:10,00,000 行

以下是 SQL Server 查询计划中显示的统计信息:

这里使用了两个代价高昂的索引查找,上面的索引查找具有以下统计信息:

Object: B.App_ID [non clustered index, non unique] 
Seek Predicate: B.App_ID = A.App_ID[clustered index,unique]

底部索引搜索具有以下统计信息:

Object: C.Bin_ID [non clustered index, non unique] 
See Predicate: C.Bin_ID = B.Bin_ID[clustered index,unique]

现在这个查询平均需要 5 分钟才能执行,我无法弄清楚应该做些什么让它更快,因为查询已经使用了索引搜索。{所有连接都是结果集所必需的}。需要帮忙 !

4

1 回答 1

1

看起来您只从表 A 中获取列,并且只检查表 B 中的现有行。

我想这会给你同样的结果,而且可能更快一点:

SELECT A.ID--, <OTHER 'A' FIELDS> 
FROM A
WHERE
   A.App_NAME LIKE '%%' AND 
   A.App_ID IN (SELECT B.App_ID
                FROM B
                  INNER JOIN C
                    ON B.Bin_ID = C.Bin_ID)
ORDER BY 
    A.App_NAME ASC
于 2011-11-01T06:28:35.833 回答