首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左连接减慢了查询速度

左连接减慢了查询速度
EN

Stack Overflow用户
提问于 2020-05-14 03:03:14
回答 1查看 34关注 0票数 0
代码语言:javascript
复制
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)

上面的查询运行起来花费了很多时间,原因是SennaCP表都是引用表。我正在尝试一种提高性能的方法,以便只为表A中包含的clientid选择senna表中code字段的select子句。SennaCP表之间的left join是速度慢问题的原因,但是如果我能以某种方式让Senna表仅根据来自Aclientid来获取记录,这将极大地提高性能。

有没有一种方法可以将clientid包含在senna表的where子句中,以便在对cp表执行join时,对较小的数据集执行join的最终clientid = clnt.CODE。从本质上讲,senna表中有许多记录可以过滤掉,以提高性能。最终目标是拉出ename

请记住,在表A中也会有100个clientid

请提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-05-17 21:51:22

我不知道我是否理解你需要什么作为输出。请查看下面的Oracle查询是否有帮助。如果没有,请更多地解释您的用例(假设您想列出表A中与表C1等或类似表匹配的所有记录,以便更好地理解)

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61782832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档