gpt4 book ai didi

sql - 如何提高SQL插入查询性能?

转载 作者:行者123 更新时间:2023-12-03 09:24:06 25 4
gpt4 key购买 nike

从一个表查询数据(大约 8300 万行)并将其插入同一架构中的另一个表时,响应时间非常长。大约需要一个半小时。查询如下所示:

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 rowsSub-query 2: 3.1 million rows Sub-query 3: 0.2 million row

最佳答案

  • 您可以尝试使用APPEND提示让 oracle 在 HWM 标记上写入新数据。
  • 如果你有索引,oracle 会浪费一些时间来更新它们。您还可以禁用它们并在插入完成后重建。
  • 此外,如果有 8300 万行,则插入会生成大量 REDO 信息。要禁用表的重做日志生成,请使用 the nologging option : 更改表 YOUR_TABLE nologging;
  • 您还可以使用 commit_wait, commit_logging tips 异步写入在线重做日志。
  • 您可以设置作业队列来安排在后台长时间运行的操作。要了解更多信息,请使用 this
  • 您可以使用parallel DML

这就是我在没有解释计划的情况下可以给你的所有建议。

关于sql - 如何提高SQL插入查询性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com