我被告知用嵌套查询重写下面的查询,而没有连接以获得更好的性能。这是真的吗?如果是这样,如何重写它?如何将其重写为嵌套查询?
SELECT distinct A.Company_Name,C.Outlet_Name,
C.Outlet_FCE_ID,D.Usergroup_Name
FROM company A, PURCHASE_INVOICE B,
Outlet C, User_Group D,CT_USER E
WHERE A.Company_ID = B.Company_ID AND B.Outlet_ID = C.Outlet_ID
AND B.Company_ID = C.Company_ID AND B.Username = E.Username
AND E.Usergroup_ID=D.Usergroup_ID
这里是表结构。
为什么嵌套查询通常会比联接更好/更差?这真的取决于很多事情。实际问题可能与您选择了太多数据然后使用'distinct'删除重复项相关。你为什么需要“独特”?你可以在外键上显示所有相关的索引吗? – 2012-04-11 13:52:38
我也很好奇。根据我的经验,假设索引设置正确,优化器将充分利用连接。 – moleboy 2012-04-11 13:53:40
如果运行缓慢,请检查执行计划和/或运行SQL事件探查器(不要将其用于生产框,尽管:)以查看扫描发生的位置。一旦你弄清楚了,建议将列上的索引添加到DBA中。但我同意其他关于嵌套查询性能的评论。 – Eugene 2012-04-11 13:54:09