首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化Oracle SQL查询以获得更快的结果

优化Oracle SQL查询以获得更快的结果
EN

Stack Overflow用户
提问于 2021-10-19 18:11:35
回答 1查看 87关注 0票数 0

我正在尝试创建一个新表,以获取过去7天的数据--从、Oracle、和其他两个表中每天有数百万行数据的表中获取项id和存储id。它甚至不再运行了,因为它太大。我怎么写才能更好地优化这个呢?

代码语言:javascript
复制
CREATE TABLE NEW_TABLE PARALLEL 6 as
SELECT 
        A.DATE_DT,
        B.STORE_NUM,
        C.ITEM_ID,
        A.BALANCE_ONHAND,
        A.DEMAND,
        A.PENDING_DELIVERY            
FROM TABLE.QTY A,
      TABLE.STORES B,
      TABLE.ITEMS C,
     (SELECT DATE_DT FROM DAY WHERE DATE_DT BETWEEN TRUNC(SYSDATE-6) and TRUNC(SYSDATE)) D
WHERE A.ITEM_ID = C.ITEM_ID 
      AND A.STORE_NUM = B.STORE_NUM
      AND A.DATE_DT = D.DATE_DT
order by A.DATE_DT;

以下是每个表中的列:

代码语言:javascript
复制
TABLE.QTY

A.DATE_DT,
A.ITEM_ID,
A.STORE_NUM,
A.BALANCE_ONHAND,
A.DEMAND,
A.PENDING_DELIVERY  

TABLE.STORES (the stores that I only want to see which is why it's a separate table) 
STORE_NUM

TABLE.ITEMS (the items that I only want to see which is why it's a separate table)
ITEM_ID

DAY
It's a pre-made table by Oracle with Day dates.

我对任何事都敞开心扉。最后,我计划在我的计算中安排这个查询,这样它每周都会创建一个新表。

EN

回答 1

Stack Overflow用户

发布于 2021-10-19 21:37:04

如果没有执行计划,就不可能对性能进行评论。假设您已经设置了外键,那么连接到其他表似乎是不必要的。你可以试试这样的方法:

代码语言:javascript
复制
CREATE TABLE NEW_TABLE PARALLEL 6 as
SELECT 
        A.DATE_DT,
        A.STORE_NUM,
        A.ITEM_ID,
        A.BALANCE_ONHAND,
        A.DEMAND,
        A.PENDING_DELIVERY            
FROM TABLE.QTY A
WHERE A.DATE_DT BETWEEN TRUNC(SYSDATE-6) and TRUNC(SYSDATE);

我怀疑如果您在DATE_DT上没有索引,您会想要一个索引的。

你说你每周都要重建这张桌子?听起来你想要的是一个物化的视图,而不是一张桌子。你可以每周刷新一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69635813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档