问题描述
嗨,汤姆,
我有一个视图,它有date_p,date_p_c。现在我有一个ssas多维数据集,它有很多基于日期的分区。我需要根据最新日期获取数据。
每月分区将数据从年初带到上个月。
每日分区将数据从月初带到前一天。
每小时分区带来该特定小时的数据。
现在monthhly分区的查询就像-
所以当我使用上面的查询时,cube的运行时间/处理时间在增加。
对于最大的功能,还有其他选择吗?我已经尝试过了,但它也没有帮助。
谢谢
我有一个视图,它有date_p,date_p_c。现在我有一个ssas多维数据集,它有很多基于日期的分区。我需要根据最新日期获取数据。
每月分区将数据从年初带到上个月。
每日分区将数据从月初带到前一天。
每小时分区带来该特定小时的数据。
现在monthhly分区的查询就像-
SELECT * FROM loc_view WHERE greatest(DATE,DATE_P_C) between TRUNC(SYSDATE, 'MONTH') and (TRUNC(SYSDATE, 'DD'))- INTERVAL '1' SECOND;复制
所以当我使用上面的查询时,cube的运行时间/处理时间在增加。
对于最大的功能,还有其他选择吗?我已经尝试过了,但它也没有帮助。
谢谢
专家解答
最大的功能意味着您的查询将无法使用分区修剪。或日期或date_p_c上的常规索引。所以你总是扫描每个分区。而且,正如您所注意到的,查询需要越来越长的时间:
一种解决方法是在greatest (c1,c2) 上创建基于函数的索引。这允许优化器使用这个索引:
create table t ( c1 int, c2 int ) partition by range ( c1 ) interval ( 1 ) ( partition p0 values less than ( 2 ) ); create index i1 on t ( c1 ); create index i2 on t ( c2 ); insert into t with rws as ( select level x , level + 1 from dual connect by level <= 10 ) select * from rws; commit; select * from t where greatest ( c1, c2 ) = 2; C1 C2 1 2 select * from table(dbms_xplan.display_cursor(null, null, 'BASIC LAST +PARTITION')); PLAN_TABLE_OUTPUT EXPLAINED SQL STATEMENT: ------------------------ select * from t where greatest ( c1, c2 ) = 2 Plan hash value: 4094519774 ---------------------------------------------------- | Id | Operation | Name | Pstart| Pstop | ---------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 1 | PARTITION RANGE ALL| | 1 |1048575| | 2 | TABLE ACCESS FULL | T | 1 |1048575| ----------------------------------------------------复制
一种解决方法是在greatest (c1,c2) 上创建基于函数的索引。这允许优化器使用这个索引:
create index i on t ( greatest ( c1, c2 ) ); select * from t where greatest ( c1, c2 ) = 2; C1 C2 1 2 select * from table(dbms_xplan.display_cursor(null, null, 'BASIC LAST +PARTITION')); PLAN_TABLE_OUTPUT EXPLAINED SQL STATEMENT: ------------------------ select * from t where greatest ( c1, c2 ) = 2 Plan hash value: 4075433511 --------------------------------------------------------------------------- | Id | Operation | Name | Pstart| Pstop | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 1 | TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED| T | ROWID | ROWID | | 2 | INDEX RANGE SCAN | I | | | ---------------------------------------------------------------------------复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
433次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
405次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
369次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
360次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
335次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
302次阅读
2025-04-08 23:57:08
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
294次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
288次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
287次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
286次阅读
2025-04-15 14:48:05