我有一个分组查询,它只返回 1 行 4 列。当我运行这个选择查询时,它需要 1-2 分钟,因为这个查询中涉及的表非常大(其中一个表有 6000 万条记录)但是当我在插入语句中使用这个查询时,它需要大约 10 分钟或更长时间。
有人能说说原因吗?我只插入一行,这应该需要 1 分钟的时间,但为什么需要 10 分钟?还请提供一些建议来解决此类问题,因为在搜索时我主要是在寻找更快的批量插入方法。下面是审查的查询结构
select col1, count(loan), sum(A), sum(B)
from
(select 'dummy' as col1, X.loan, BT.A, BT.B,
row_number() over (partition by X.loan order by BT.C desc) rnum
from Big_Table BT, X
where X.loan = BT.loan
and X.date< "some date"
and X.date>"another date")
where rnum =1
and B> "some value"
group by col1
对于 Big_Table 索引在列 loan 和 C 上。
最佳答案
此查询可能会更快地为您提供相同的结果:
SELECT "dummy", COUNT(BT.loan), SUM(BT.A), SUM(BT.B)
FROM Big_Table BT
JOIN (
SELECT X.loan, max(BT.C) as C
FROM X
JOIN Big_Table BT ON X.loan = BT.loan
WHERE X.date > "some date"
AND X.date < "another date"
GROUP BY X.loan ) partitioned
ON BT.loan = partitioned.loan AND BT.C = partitioned.C
WHERE BT.B > "some value"
并确保您在 X 上有一个索引用于 loan
和 date
以及在 Big_Table 上用于 loan
, C
和 B
。
关于sql - 在 oracle sql 中仅插入 1 行的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795657/