oracle 10g下有几种扫描方式,注意最后一种扫描方式,当对分区的列进行计算时,会不走分区。这跟对索引列进行计算会导致无法用索引一样。

--扫描单个分区  PARTITION RANGE SINGLE

   --连续扫描多个分区 PARTITION RANGE ITERATOR

   --不连续扫描多个分区  PARTITION RANGE INLIST

   --扫描全分区 PARTITION RANGE ALL

SQL> drop table t_range purge;

SQL> create table t_range (id number not null PRIMARY KEY, test_date date) partition by range (test_date)

    (

    partition p_1 values less than (to_date('2013-12-01', 'yyyy-mm-dd')),

    partition p_2 values less than (to_date('2014-02-01', 'yyyy-mm-dd')),

    partition p_3 values less than (to_date('2014-03-01', 'yyyy-mm-dd')),

    partition p_4 values less than (to_date('2014-04-01', 'yyyy-mm-dd')),

    partition p_5 values less than (to_date('2014-05-01', 'yyyy-mm-dd')),

    partition p_6 values less than (to_date('2014-06-01', 'yyyy-mm-dd')),

    partition p_max values less than (MAXVALUE)

   ) nologging;

SQL> insert /*+append */ into t_range  select rownum,

           to_date(to_char(sysdate - 140, 'J') +

                   trunc(dbms_random.value(0, 80)),

                   'J')

      from dual

    connect by rownum <= 100000;

SQL> commit;

SQL> exec dbms_stats.gather_table_stats(user,'T_RANGE');

SQL> select to_char(t.test_date,'yyyy-MM'),count(1) from t_range t

     group by to_char(t.test_date,'yyyy-MM');

TO_CHAR   COUNT(1)

------- ----------

2014-01      38803

2014-03      11242

2013-12      15107

2014-02      34848



SQL> set autotrace traceonly

--扫描单个分区

SQL> select * from t_range  where test_date = to_date('2014-04-28', 'yyyy-mm-dd');

运行计划

----------------------------------------------------------

Plan hash value: 3010141842

--------------------------------------------------------------------------------------------------

| Id  | Operation              | Name    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

--------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT       |         |     1 |    22 |     2   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE SINGLE|         |     1 |    22 |     2   (0)| 00:00:01 |     5 |     5 |

|*  2 |   TABLE ACCESS FULL    | T_RANGE |     1 |    22 |     2   (0)| 00:00:01 |     5 |     5 |

--------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - filter("TEST_DATE"=TO_DATE('2014-04-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))

统计信息

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          3  consistent gets

          0  physical reads

          0  redo size

        327  bytes sent via SQL*Net to client

        374  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          0  rows processed



--连续扫描多个分区

SQL> select *  from t_range

     where test_date <= to_date('2014-04-28', 'yyyy-mm-dd')

       and test_date >= to_date('2014-02-28', 'yyyy-mm-dd');

运行计划

----------------------------------------------------------

Plan hash value: 1921532398

----------------------------------------------------------------------------------------------------

| Id  | Operation                | Name    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

----------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT         |         | 12556 |   147K|    28   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE ITERATOR|         | 12556 |   147K|    28   (0)| 00:00:01 |     3 |     5 |

|*  2 |   TABLE ACCESS FULL      | T_RANGE | 12556 |   147K|    28   (0)| 00:00:01 |     3 |     5 |

----------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - filter("TEST_DATE">=TO_DATE('2014-02-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND

              "TEST_DATE"<=TO_DATE('2014-04-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))

统计信息

----------------------------------------------------------

          1  recursive calls

          0  db block gets

        956  consistent gets

          0  physical reads

          0  redo size

     309138  bytes sent via SQL*Net to client

       9515  bytes received via SQL*Net from client

        832  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

      12453  rows processed



--不连续扫描多个分区

SQL> select *  from t_range

     where test_date = to_date('2014-04-28', 'yyyy-mm-dd')

       or test_date = to_date('2014-02-28', 'yyyy-mm-dd');

运行计划

----------------------------------------------------------

Plan hash value: 2021067984

--------------------------------------------------------------------------------------------------

| Id  | Operation              | Name    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

--------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT       |         |  1678 | 20136 |    21   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE INLIST|         |  1678 | 20136 |    21   (0)| 00:00:01 |KEY(I) |KEY(I) |

|*  2 |   TABLE ACCESS FULL    | T_RANGE |  1678 | 20136 |    21   (0)| 00:00:01 |KEY(I) |KEY(I) |

--------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - filter("TEST_DATE"=TO_DATE('2014-02-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss') OR

              "TEST_DATE"=TO_DATE('2014-04-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))

统计信息

----------------------------------------------------------

          1  recursive calls

          0  db block gets

        175  consistent gets

          0  physical reads

          0  redo size

      22646  bytes sent via SQL*Net to client

       1265  bytes received via SQL*Net from client

         82  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

       1211  rows processed





--扫描全分区

SQL> select * from t_range where to_char(test_date,'yyyy-MM-dd')='2014-04-01';

运行计划

----------------------------------------------------------

Plan hash value: 2128486036

-----------------------------------------------------------------------------------------------

| Id  | Operation           | Name    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

-----------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |         |   994 | 11928 |    59   (4)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE ALL|         |   994 | 11928 |    59   (4)| 00:00:01 |     1 |     7 |

|*  2 |   TABLE ACCESS FULL | T_RANGE |   994 | 11928 |    59   (4)| 00:00:01 |     1 |     7 |

-----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - filter(TO_CHAR(INTERNAL_FUNCTION("TEST_DATE"),'yyyy-MM-dd')='2014-04-01')

统计信息

----------------------------------------------------------

          1  recursive calls

          0  db block gets

        272  consistent gets

          0  physical reads

          0  redo size

        327  bytes sent via SQL*Net to client

        374  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          0  rows processed

oracle 10g下范围分区扫描的几种方式的更多相关文章

  1. Solon 开发,四、Bean 扫描的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  2. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

  3. Oracle实现主键自增的几种方式

    数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去 ...

  4. node.js 下依赖Express 实现post 4种方式提交参数

    上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...

  5. 27. Oracle 10g下emctl start dbconsole 报错:OC4J Configuration issue 问题解决

    (dbconsole配置好外面的sqlplus才能连的上服务器上的数据库) 采取重新配置emctl 的方法来解决 [oracle@guohuias3 oracle]$ emca -config dbc ...

  6. Oracle 10g下emctl start dbconsole 报错:OC4J Configuration issue 问题解决

    http://blog.sina.com.cn/s/blog_95b5eb8c0100x4a7.html http://blog.csdn.net/sz_bdqn/article/details/17 ...

  7. eclipse下部署web工程的两种方式

    习惯了Eclipse 的开发,就觉得不想那么懒去用MyEclipse傻瓜式的部署工程. 第一种,手动部署工程. 情况一:如果工程目录在tomcat目录的webapp目录下,这种情况就不需要有工程部署的 ...

  8. liunx下search文件内容的几种方式

    第一种.使用vim来search内容 /regex_word,从上到下匹配 ?regex_word,从下到上匹配 n是获取下一个匹配字符串,N是获取上一个匹配字符串. 第二种.使用grep命令 gre ...

  9. Dynamics CRM 非声明验证方式下连接组织服务的两种方式的性能测试

    今天看了勇哥的博文"http://luoyong0201.blog.163.com/blog/static/1129305201510153391392/",又认识到了一种新的连接 ...

随机推荐

  1. Java多线程synchronized关键字

    synchronized关键字代表着同步的意思,在Java中被synchronized修饰的有三种情况 1.同步代码块 //锁为objsynchronized(obj){ while(true){ i ...

  2. 机器学习数学|微积分梯度jensen不等式

    机器学习中的数学 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原创文章,如需转载请保留出处 本博客为七月在线邹博老师机器学习数学课程学习笔记 索引 微积分,梯度和Jensen不等式 Tay ...

  3. Celery 源码解析四: 定时任务的实现

    在系列中的第二篇我们已经看过了 Celery 中的执行引擎是如何执行任务的,并且在第三篇中也介绍了任务的对象,但是,目前我们看到的都是被动的任务执行,也就是说目前执行的任务都是第三方调用发送过来的.可 ...

  4. js 切换全屏

    公司有一个需求就是点击某一个按钮实现全屏切换功能,然后呢我就在网上扒了段代码.封装了一下.使用的小伙伴们可以看看哦! 切换全屏代码 <!DOCTYPE html> <html> ...

  5. Oracle与Sql server的区别

    一直搞不明白Oracle数据库和sql server的区别,今天我特意查资料把他们的区别整理出来 Oracle数据库:Oracle Database,又名Oracle RDBMS,或简称Oracle. ...

  6. nginx-http-concat资源文件合并模块

    网页中引入多个CSS和JS的时候,浏览器会发出很多(css个数+js个数)次网络请求,甚至有的网页中有数十个以上的CSS或JS文件,用户体验特别不好,正好可以利用nginx-http-concat n ...

  7. C语言系列之printf和%12d的用法(三)

    看C语言程序的时候,往往会遇到printf函数输出,在此,我想总结一下printf的一般用法以及%12d是什么意思 printf函数的一般格式为 printf(格式控制,输出列表): 例如: prin ...

  8. 常见的Mysql数据库优化总结

    索引 1.主键索引 作用:唯一约束和提高查询速度 #建表时创建主键索引 create table `table_name`( `id` int unsigned not null auto_incre ...

  9. 社群公会GangSDK:程序员入行AI领域需要哪些技能?

    作为一名Android开发工程师,身边总有些同行很焦虑,看着人工智能越来越火,总是担心Android要不行了,所以,我们需要转行么?Android还能走多久?其实,无论是对于Android还是iOS开 ...

  10. 25个Java机器学习工具和库

    本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预 ...