sql - 在 oracle sql 中仅插入 1 行的更快方法

标签 sql oracle insert

我有一个分组查询,它只返回 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 上有一个索引用于 loandate 以及在 Big_Table 上用于 loan, CB

关于sql - 在 oracle sql 中仅插入 1 行的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795657/

相关文章:

oracle - Oracle 中的 Diatric 字符串转换 - Oracle 中的 TO_ASCII 替代 - 如何删除重音和特殊字符

sql - 如果没有返回值,如何使 select 语句返回 null?

mysql - 如何自动向表中插入一行?

php - 如何在 Yii2 中使用 leftJoin 从两个表中获取所有列数据

sql - 从另一个数据库中的表更新主键

mysql - 加入查询也返回空

sql - 将字符串追加到 nvarchar 类型列中的现有值

Linux/甲骨文数据库 : how to access website in same subnet using local IP address?

sql - oracle在选择内部调用存储过程

css - 在 html 类 =""属性中插入 ruby