Oracle - SQL查询花费了太多时间

时间:2017-09-19 09:15:20

标签: sql oracle performance

我有这张表:

  • AUTOMA
  • 有分
  • 客户端
  • PROFIL
  • 市场

最大的一个是累计,有近3000万行。客户端中有2万行,自动化中有3万行。

我需要获得自动化中的每一行,其中:

  • mktcode匹配来自市场的mktcode
  • acccode匹配来自accoun的acccode
  • 来自accoun的ccccode与来自客户端的ccccode匹配
  • 来自客户端的
  • clicode匹配来自profil的clicode
  • 来自profil的
  • procode是'ADMIN'

这是我的疑问:

SELECT au.acccode, au.oprcode, au.ctrcode, au.ctrdesc, au.mkcode
FROM automa au
JOIN profil pr ON pr.procode = 'ADMIN'
JOIN client cl ON cl.clicode = pr.clicode
JOIN market mk ON mk.mktcode = au.mkcode
JOIN accoun ac ON ac.ccccode = cl.ccccode AND ac.acccode = au.acccode
GROUP BY au.acccode, au.oprcode, au.ctrcode, au.ctrdesc, au.mkcode

需要60秒。

我有两个额外的问题:

  • 我看不到执行计划
  • 我无法创建索引。如果这是唯一的方法,我可以要求创建它们,但这需要一些时间来完成。

有什么想法吗?我无法弄清楚如何在没有索引的情况下解决它。

1 个答案:

答案 0 :(得分:0)

自动 profil 之间没有连接条件。 如果你试试

SELECT au.acccode, au.oprcode, au.ctrcode, au.ctrdesc, au.mkcode
  FROM automa au
  JOIN profil pr ON pr.procode = 'ADMIN'

此查询从automa返回所有行,不进行任何过滤。 首先,添加连接条件。

您也可以尝试重写此查询。因为您只需要来自自动的数据,所以请尝试使用EXISTS。可能在那之后你不需要分组/分开。这样的事情:

SELECT au.acccode, au.oprcode, au.ctrcode, au.ctrdesc, au.mkcode
  FROM automa au
 where exists (select null 
                from profil pr 
                JOIN client cl ON cl.clicode = pr.clicode and pr.procode = 'ADMIN'
                JOIN accoun ac ON ac.ccccode = cl.ccccode 
                              AND ac.acccode = au.acccode
                JOIN market mk ON mk.mktcode = au.mkcode
               )