如何提高SQL插入查询性能?
当我从一个表中查询数据(大约8300万行)并将其插入同一模式中的另一个表时,响应时间非常长。这几乎需要一个半小时。查询如下所示:如何提高SQL插入查询性能?,sql,oracle,Sql,Oracle,当我从一个表中查询数据(大约8300万行)并将其插入同一模式中的另一个表时,响应时间非常长。这几乎需要一个半小时。查询如下所示: INSERT INTO TABLE_A ( DIM_KEY, CLIENT_KEY, CONSUMER_DIM_KEY, PRCS_WK ) ( (( (SELECT DIM_KEY, client_KEY, consumer_dim_key, prcs_WK FR
INSERT
INTO TABLE_A
(
DIM_KEY,
CLIENT_KEY,
CONSUMER_DIM_KEY,
PRCS_WK
)
(
((
(SELECT DIM_KEY,
client_KEY,
consumer_dim_key,
prcs_WK
FROM
(*SELECT DISTINCT DIM_KEY,
client_KEY,
prcs_WK,
consumer_dim_key,
SUM(SALE_AMOUNT) OVER(PARTITION BY CONSUMER_DIM_KEY) AS SALE_AMOUNT
FROM FACT_TABLE
WHERE DIM_KEY = '300067'
AND CRITERIA_ID = '1234'
AND IS_EXISTS = 'N'*
)
WHERE SALE_AMOUNT > 0
)
UNION
(SELECT DIM_KEY,
client_KEY,
consumer_dim_key,
prcs_WK
FROM
(*SELECT DISTINCT DIM_KEY,
client_KEY,
prcs_WK,
consumer_dim_key,
SUM(SALE_AMOUNT) OVER(PARTITION BY CONSUMER_DIM_KEY) AS SALE_AMOUNT
FROM FACT_TABLE
WHERE DIM_KEY = '300067'
AND CRITERIA_ID = '1235'
AND IS_EXISTS = 'N'*
)
WHERE SALE_AMOUNT > 0
))
UNION
(SELECT DIM_KEY,
client_KEY,
consumer_dim_key,
prcs_WK
FROM
(*SELECT DISTINCT DIM_KEY,
client_KEY,
prcs_WK,
consumer_dim_key,
SUM(SALE_AMOUNT) OVER(PARTITION BY CONSUMER_DIM_KEY) AS SALE_AMOUNT
FROM FACT_TABLE
WHERE DIM_KEY = '300067'
AND CRITERIA_ID = '1236'
AND IS_EXISTS = 'N'*
)
WHERE SALE_AMOUNT > 0
))
)
这里所有的表都在同一个模式中。
标记为*的查询返回的行数为:
Sub-query 1: 80 million rows
Sub-query 2: 3.1 million rows
Sub-query 3: 0.2 million row
子查询1:8000万行
子查询2:310万行
子查询3:20万行
- 您可以尝试使用提示使oracle在HWM标记上写入新数据李>
- 如果您有索引,oracle会浪费一些时间来更新它们。您还可以禁用它们并在插入完成后重建李>
- 另外,如果有8300万行,那么insert将生成大量重做信息。要禁用表的重做日志生成,请使用:
altertable YOUR_table nologging代码>
- 还可以使用异步写入联机重做日志
- 您可以设置作业队列以在后台计划长时间运行的操作。多读多用
- 你可以用
这是我在没有解释计划的情况下可以给你的所有建议。向我们展示执行计划和表的定义,包括所有索引。谢谢Zaratutra!谢谢你的建议。我将尽我所能。