问题描述
下午好,
我有一个客户,用很多表管理数百万个数据。问题是,到目前为止,我们有一个很大的表2013年,我们想把它分成两部分,一个在过去的三个月里,一个在其余的 (我们称之为历史)。如果客户想咨询最后三个月,这很容易和快速,但如果想咨询较旧的,我们已经创建了一个视图与历史和原始表的连接 (现在只有三个月的数据)。
我们正在测试性能和视图,在我们的测试实验室中,与使用基本表执行相同的sql进行比较,我们没有真正的好视图。我们预计性能会受到轻微影响,但影响太大了。
当sql进入视图时,有什么方法可以改善它?
我们有标准许可证,所以我们不能选择参加。
提前谢谢你。
我有一个客户,用很多表管理数百万个数据。问题是,到目前为止,我们有一个很大的表2013年,我们想把它分成两部分,一个在过去的三个月里,一个在其余的 (我们称之为历史)。如果客户想咨询最后三个月,这很容易和快速,但如果想咨询较旧的,我们已经创建了一个视图与历史和原始表的连接 (现在只有三个月的数据)。
我们正在测试性能和视图,在我们的测试实验室中,与使用基本表执行相同的sql进行比较,我们没有真正的好视图。我们预计性能会受到轻微影响,但影响太大了。
当sql进入视图时,有什么方法可以改善它?
我们有标准许可证,所以我们不能选择参加。
提前谢谢你。
专家解答
对于标准版,我会考虑使用 “分区视图”,这是分区的前身。设置和维护需要花费更多的精力,但是优化器足够聪明,可以避免不需要的表
您可以从过滤器行4和6中看到,然后我们实际上从未访问表T2和T3,因为它们可能不包含该object_id范围的行。
SQL> create table t1 as select * from dba_objects where object_id between 0 and 20000; Table created. SQL> create table t2 as select * from dba_objects where object_id between 20001 and 40000; Table created. SQL> create table t3 as select * from dba_objects where object_id between 40001 and 60000; Table created. SQL> SQL> alter table t1 add constraint ck1 check (object_id between 0 and 20000); Table altered. SQL> alter table t2 add constraint ck2 check (object_id between 20001 and 40000); Table altered. SQL> alter table t3 add constraint ck3 check (object_id between 40001 and 60000); Table altered. SQL> SQL> create or replace view t as 2 select * from t1 3 union all 4 select * from t2 5 union all 6 select * from t3 7 ; View created. SQL> SQL> set autotrace traceonly explain SQL> select * from t 2 where object_id < 30; Execution Plan ---------------------------------------------------------- Plan hash value: 3867803903 ----------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 28 | 7224 | 331 (1)| 00:00:01 | | 1 | VIEW | T | 30 | 3668 | 101 (0)| 00:00:01 | | 2 | UNION-ALL | | | | | | |* 3 | TABLE ACCESS FULL | T1 | 28 | 3388 | 101 (0)| 00:00:01 | |* 4 | FILTER | | | | | | |* 5 | TABLE ACCESS FULL| T2 | 1 | 140 | 115 (0)| 00:00:01 | |* 6 | FILTER | | | | | | |* 7 | TABLE ACCESS FULL| T3 | 1 | 140 | 117 (0)| 00:00:01 | ----------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("OBJECT_ID"<30) 4 - filter(NULL IS NOT NULL) 5 - filter("OBJECT_ID"<30) 6 - filter(NULL IS NOT NULL) 7 - filter("OBJECT_ID"<30)复制
您可以从过滤器行4和6中看到,然后我们实际上从未访问表T2和T3,因为它们可能不包含该object_id范围的行。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
605次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
597次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
499次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
482次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
465次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
441次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
438次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
430次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
372次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
362次阅读
2025-04-15 14:48:05