【发布时间】:2017-09-19 09:15:20
【问题描述】:
我有这张桌子:
- 自动机
- 账户
- 客户
- 简介
- 市场
最大的是 accoun,有将近 3000 万行。客户端有2万行,自动机有3万行。
我需要获取自动机中的每一行,其中:
- mktcode 匹配来自市场的 mktcode
- acccode 匹配来自 accoun 的 acccode
- 来自 accoun 的 ccccode 与来自客户端的 ccccode 匹配
- 来自客户端的 clicode 与来自 profil 的 clicode 匹配
- profil 的编码是“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 秒。
我还有 2 个额外的问题:
- 我看不到执行计划
- 我无法创建索引。如果这是唯一的方法,我可以要求创建它们,但这需要一些时间才能完成。
有什么想法吗?如果没有索引,我无法弄清楚如何解决它。
【问题讨论】:
-
请edit您的问题并解释为什么您看不到执行计划。不可以跑
EXPLAIN PLAN吗? -
我对Oracle没有经验,但是在一个有3000万行加入其他表的表中进行这样的查询不是60秒正常吗?
-
为什么
GROUP BY不涉及聚合函数?SELECT DISTINCT怎么了? -
@jarlh 创建合适的索引时(根据 sql 访问顾问),使用
GROUP BY将比使用DISTINCT更快 -
@BarbarosÖzhan,感谢您提供的信息! (我不是 Oracle 人,所以我对此一无所知。)
标签: sql oracle performance