当前位置:  数据库>oracle

Oracle分区表执行计划

    来源: 互联网  发布时间:2017-06-13

    本文导语: Oracle分区表有很多好处,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果。当然表设计得不好也会适得其反,效果比普通表跟糟糕。为了更好的使用分区表,这里看一下分区表的执行计划...

Oracle分区表有很多好处,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果。当然表设计得不好也会适得其反,效果比普通表跟糟糕。
为了更好的使用分区表,这里看一下分区表的执行计划。
PARTITION RANGE ALL:扫描所有分区
PARTITION RANGE ITERATOR:扫描多个分区,小于所有个分区数量
PARTITION RANGE SINGLE:扫描单一的分区
KEY,表示执行时才知道哪个分区

看到关键字ALL的时候就要注意了,扫描的是全部分区。写sql的时候在where条件中能充分利用分区字段来限制的话最好,这样能起到分区裁剪的作用,没必要的分区就不用扫描了。

SQL> create table t1
  2  partition by range(created)(
  3  partition p1 values less than (to_date('20140101','yyyymmdd')),
  4  partition p2 values less than (to_date('20140201','yyyymmdd')),
  5  partition p3 values less than (to_date('20140301','yyyymmdd')),
  6  partition p4 values less than (to_date('20140401','yyyymmdd')),
  7  partition p5 values less than (to_date('20140501','yyyymmdd')),
  8  partition p6 values less than (to_date('20140601','yyyymmdd')),
  9  partition p7 values less than (to_date('20140701','yyyymmdd')),
 10  partition p8 values less than (to_date('20140801','yyyymmdd')),
 11  partition p9 values less than (to_date('20140901','yyyymmdd')),
 12  partition p10 values less than (to_date('20141001','yyyymmdd')),
 13  partition p11 values less than (to_date('20141101','yyyymmdd')),
 14  partition p12 values less than (to_date('20141201','yyyymmdd')),
 15  partition p13 values less than (maxvalue)
 16  )
 17  as select * from dba_objects where created>=to_date('20131001','yyyymmdd');
 
--PARTITION RANGE ALL:扫描所有分区
SQL> explain plan for select count(*) from t1;
-------------------------------------------------------------------------------------
| Id  | Operation            | Name | Rows  | Cost (%CPU)| Time    | Pstart| Pstop |
-------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT    |      |    1 |  106  (1)| 00:00:02 |      |      |
|  1 |  SORT AGGREGATE      |      |    1 |            |          |      |      |
|  2 |  PARTITION RANGE ALL|      | 41973 |  106  (1)| 00:00:02 |    1 |    13 |
|  3 |    TABLE ACCESS FULL | T1  | 41973 |  106  (1)| 00:00:02 |    1 |    13 |
-------------------------------------------------------------------------------------

--PARTITION RANGE ITERATOR:扫描多个分区,小于所有个分区数量
SQL> explain plan for select * from t1 where created>=to_date('20141101','yyyymmdd');
-------------------------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |
-------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |      | 13121 |  2267K|    39  (6)| 00:00:01 |      |      |
|  1 |  PARTITION RANGE ITERATOR|      | 13121 |  2267K|    39  (6)| 00:00:01 |    12 |    13 |
|*  2 |  TABLE ACCESS FULL      | T1  | 13121 |  2267K|    39  (6)| 00:00:01 |    12 |    13 |
-------------------------------------------------------------------------------------------------

 

--PARTITION RANGE SINGLE:扫描单一的分区
SQL> explain plan for select * from t1 where created>=to_date('20141217','yyyymmdd');
-----------------------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |
-----------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT      |      |  947 |  163K|    28  (0)| 00:00:01 |      |      |
|  1 |  PARTITION RANGE SINGLE|      |  947 |  163K|    28  (0)| 00:00:01 |    13 |    13 |
|*  2 |  TABLE ACCESS FULL    | T1  |  947 |  163K|    28  (0)| 00:00:01 |    13 |    13 |
-----------------------------------------------------------------------------------------------

--KEY,表示执行时才知道哪个分区
SQL> explain plan for select * from t1 where created>=sysdate-1;
-------------------------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |
-------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |      |  947 |  163K|    33  (16)| 00:00:01 |      |      |
|  1 |  PARTITION RANGE ITERATOR|      |  947 |  163K|    33  (16)| 00:00:01 |  KEY |    13 |
|*  2 |  TABLE ACCESS FULL      | T1  |  947 |  163K|    33  (16)| 00:00:01 |  KEY |    13 |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - filter("CREATED">=SYSDATE@!-1)

SQL> variable x varchar2;
SQL> explain plan for select * from t1 where created>=to_date(:x,'yyyymmdd');
-------------------------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |
-------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |      |  2099 |  362K|  107  (2)| 00:00:02 |      |      |
|  1 |  PARTITION RANGE ITERATOR|      |  2099 |  362K|  107  (2)| 00:00:02 |  KEY |    13 |
|*  2 |  TABLE ACCESS FULL      | T1  |  2099 |  362K|  107  (2)| 00:00:02 |  KEY |    13 |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - filter("CREATED">=TO_DATE(:X,'yyyymmdd'))


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎么写一个Shell来执行这样的功能,访问Oracle数据库,然后执行一个SQL脚本,生成一个文件。急!
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • oracle 可以在crontab 中定时执行吗?
  • oracle sql执行过程(流程图)
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • ORACLE安装时/tmp/orainstRoot.sh 执行发生错误
  • 求救:HPUNIX下的ORACLE7执行select * from tablename提示权限不足!!
  • 为什么 export ORACLE_SID=test写在程序里面就不会执行?
  • 请问在 Linux 下如何用代码实现连接oracle数据库 并 执行 SQL 语句?
  • shell调用oracle储存过程,怎么判断储存过程执行结果是否正确
  • shell 执行oracle sql脚本的问题
  • oracle单库彻底删除干净的执行步骤
  • 查看Oracle的执行计划一句话命令
  • 关于ORACLE中执行批处理的问题
  • oracle中得到一条SQL语句的执行时间的两种方式
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • Nagios check_oracle_health 关于执行SQL问题
  • 执行Commit时Oracle做哪些工作
  • RedHat AS 4 安装oracle9i的时候,执行Disk1下的runInstaller后提示正在初始化虚拟机,请等待后就再无反应
  • JBUILDER如何执行ORACLE的储存过程
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,