SELECT COALESCE(clnt.ename,clientid) NAME, sum(turnover)
FROM A
LEFT JOIN (SELECT DISTINCT csid,code,CP.ename
FROM Senna
LEFT JOIN (SELECT DISTINCT csid,ename FROM C1) CP ON Senna.csid=CP.csid) clnt ON clientid = clnt.CODE
GROUP BY COALESCE(clnt.ename,clientid)上面的查询运行起来花费了很多时间,原因是Senna和CP表都是引用表。我正在尝试一种提高性能的方法,以便只为表A中包含的clientid选择senna表中code字段的select子句。Senna和CP表之间的left join是速度慢问题的原因,但是如果我能以某种方式让Senna表仅根据来自A的clientid来获取记录,这将极大地提高性能。
有没有一种方法可以将clientid包含在senna表的where子句中,以便在对cp表执行join时,对较小的数据集执行join的最终clientid = clnt.CODE。从本质上讲,senna表中有许多记录可以过滤掉,以提高性能。最终目标是拉出ename。
请记住,在表A中也会有100个clientid。
请提供任何帮助,将不胜感激。
发布于 2020-05-17 21:51:22
我不知道我是否理解你需要什么作为输出。请查看下面的Oracle查询是否有帮助。如果没有,请更多地解释您的用例(假设您想列出表A中与表C1等或类似表匹配的所有记录,以便更好地理解)
SELECT
COALESCE(clnt.ename, clientid) NAME,
sum(turnover)
FROM
A
LEFT JOIN (
SELECT
DISTINCT senna.csid,
senna.code,
CP.ename
FROM
Senna senna
join C1 CP on senna.csid = CP.csid
) clnt ON clientid = clnt.CODE
GROUP BY
COALESCE(clnt.ename, clientid);https://stackoverflow.com/questions/61782832
复制相似问题