【发布时间】:2015-08-25 11:41:09
【问题描述】:
我正在调查一个问题,即我们的应用程序需要花费太多时间从 Oracle 数据库中获取数据。在我的调查中,我发现查询的缓慢可以追溯到表之间的连接以及聚合函数 SUM。 这可能看起来很简单,但我不擅长 SQL 查询优化。
查询如下
SELECT T1.TONNES, SUM(R.TONNES) AS TOTAL_TONNES
FROM
RECLAIMED R ,
(SELECT DELIVERY_OUT_ID, SUM(TONNES) AS TONNES FROM RECLAIMED WHERE DELIVERY_IN_ID=53773 GROUP BY DELIVERY_OUT_ID) T1
where
R.DELIVERY_OUT_ID = T1.DELIVERY_OUT_ID
GROUP BY
T1.TONNES
SUM(R.TONNES) 是每次交货的总吨数。
SUM(TONNES) 是每次交货的总吨数。
我在这个表中有 1600 万个条目,通过平均尝试多个 delivery_in_id,我得到大约 6 秒的时间让查询返回。
我有类似的数据库(完整的副本,但只有 400 万个条目),当应用相同的查询时,我得到的时间不到 1 秒。 它们都有相同的索引,所以我相信索引不是问题。
我确定这只是数据,它在第一个数据库(1600 万)上很重。我有一种感觉,当这个查询被优化时,问题就会得到解决。 欢迎提出建议:)
【问题讨论】:
-
RAM 缓存设置有多大?听起来 400 万个条目适合 RAM,而 1600 万个不适合。
-
您好 BitBank,感谢您的评论,我怎么知道?
-
我不是数据库专家,所以我不具体知道您需要做什么。我们的产品(使用 MySQL)有一个类似的问题,这是解决它的修复程序。
-
你能告诉我们索引是什么吗?
-
比较两个系统中的解释计划,看看是否有任何变化以及导致它变慢的对象。
标签: oracle performance query-optimization