首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何降低成本

如何降低成本
EN

Stack Overflow用户
提问于 2021-12-13 12:24:20
回答 2查看 48关注 0票数 1
代码语言:javascript
运行
复制
select *
from inv_dist_stg(table_name)
where interface_line_id in (select interface_line_id from inv_lines_stg
                            where status = 'processed'
                              and trun(creation_date) <= (trun(sysdate)-10))

在inv_dist_stg表中已经有了列interface_line_id上的索引

EN

回答 2

Stack Overflow用户

发布于 2021-12-16 12:49:28

in会慢得多,使用一个连接代替。查询如下:

代码语言:javascript
运行
复制
select *
from inv_dist_stg a,inv_lines_stg b
where a.interface_line_id=b.interface_line_id 
and b.status = 'processed' and trun(b.creation_date) <= (trun(sysdate)-10)

statuscreation_date上创建索引

然后你就可以走了!

票数 0
EN

Stack Overflow用户

发布于 2021-12-16 13:03:32

你的查询看起来很好。您的表在interface_line_id上有一个索引,这很好。因此,您可以快速访问在子查询中找到的内容。

现在,您需要子查询的索引。这是一个应该包括statuscreation_date的索引。由于我不知道哪个更有选择性,您可能需要尝试两个索引,并查看DBMS使用哪个索引。我认为trun是一个错误,实际上意味着trunc。现在,您可以在trunc(creation_date)上创建索引,也可以将查询更改为不使用trunccreation_date。最后,您希望索引包含主查询所需的interface_line_id

我建议

代码语言:javascript
运行
复制
select *
from inv_dist_stg
where interface_line_id in 
(
  select interface_line_id
  from inv_lines_stg
  where status = 'processed'
  and creation_date < trunc(sysdate) - 9
);

代码语言:javascript
运行
复制
create index idx1 on inv_dist_stg (status, creation_date, interface_line_id);
create index idx2 on inv_dist_stg (creation_date, status, interface_line_id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70334622

复制
相关文章

相似问题

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