我有这张表:
最大的一个是累计,有近3000万行。客户端中有2万行,自动化中有3万行。
我需要获得自动化中的每一行,其中:
这是我的疑问:
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秒。
我有两个额外的问题:
有什么想法吗?我无法弄清楚如何在没有索引的情况下解决它。
答案 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
)