我有一个查询,它使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上述表格中的数据->
以下是从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分钟才能执行,而且我无法弄清楚应该做什么,使它更快,因为查询已经使用了索引查找。{对于结果集来说,所有联接都是必需的。需要帮助!
发布于 2011-11-01 06:28:35
看起来,您只从表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 ASChttps://stackoverflow.com/questions/7962827
复制相似问题