oracle 10g下范围分区扫描的几种方式

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

时间: 2024-12-13 05:29:21

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

Linux下构造分区满的两种方式

我们都知道Linux提供了特殊设备/dev/full来供测试磁盘满的情况,然而它只对文件有效.对于使用固定文件名或可预测的文件名的程序,一般/dev/full就能满足需要了.对于文件名由某种不可预测的方式生成的程序,还需要构造一个写满的分区.一种显而易见的方式是创建一个真的分区,然后写满,然而操作起来却比较麻烦.本文提供其他两种相对简单的方式. 使用内存盘 基本原理为将内存挂载为一个磁盘,然后使用dd写满.Linux支持两种内存盘,ramfs和tmpfs. Ramfs必须使用物理内存,无法利用s

Oracle 10g下ocr和votedisk的管理

ocr和votedisk是什么? 作为集群,oracle cluster需要共享存储来存放整个集群的配置信息,ocr便是用例存放这些配置信息的地方,ocr的存储容量一般不会太大,在10g下,oracle建议256M已经足以.ocr必须需要存储在集群文件系统或者裸设备上,出于性能上的考虑,本人建议将ocr建立在裸设备上,性能高并且管理也不复杂(ocr和votedisk的数量一般不会太多).ocr中存放的是集群的配置信息,这些信息只能在一个节点上进行维护操作,这一节点叫做Master Node,其他

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

数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去自己来实现,下面有几种实现的方式 一.序列化+触发器 第一步在表结构完整的情况下创建一个序列 CREATE SEQUENCE SEQ_NAME INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999 START WITH 1 CACHE 20 第二部创

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

上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ,详细介绍请点击查看. 分别是这四种: www-form-urlencoded, form-data, application/json, text/xml Express 依赖 bodyParser 对请求的包体进行解析,默认支持:application/json, application/x-

windows下硬件信息的另一种方式获取

通过命令方式TCHAR szFetCmd[] = _T("wmic baseboard get serialnumber");可以有: 查找主板厂商和型号 wmic BaseBoard get Manufacturer wmic BaseBoard get Product 先决条件:a. 启动Windows Management Instrumentation服务,开放TCP135端口.b. 本地安全策略的"网络访问: 本地帐户的共享和安全模式"应设为"经

Linux下配置IP地址的几种方式--------CentOS 6.X

Linux配置IP地址 Linux下一切皆文件,要想配置的参数永久有效基本上要修改配置文件.以下主要讲怎么使用ifconfig,route,ip等命令配置IP地址等相关参数并配置相关配置文件使其永久有效.主要使用CentOS 6系列 重启网络服务 从CentOS 6系列开始系统默认使用 /etc/init.d/NetworkManager脚本管理网络服务.但也可使用/etc/init.d/network来管理.NetworkManager不支持网络桥接等高级功能.以下使用实例 NetworkMa

linux swap分区修改的2种方式

参考网站:http://blog.csdn.net/hshl1214/article/details/6048278 原帖子写的很好,我把步骤给贴出来,测试系统:rhel6.4 x64 1.新建磁盘分区作为swap分区 [[email protected] /]# free -m  //查看当前swap信息             total       used       free     shared    buffers     cachedMem:          1878     

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

第一种.使用vim来search内容 /regex_word,从上到下匹配 ?regex_word,从下到上匹配 n是获取下一个匹配字符串,N是获取上一个匹配字符串. 第二种.使用grep命令 grep -i pattern files :不区分大小写地搜索.默认情况区分大小写, grep -l pattern files :只列出匹配的文件名, grep -L pattern files :列出不匹配的文件名, grep -w pattern files :只匹配整个单词,而不是字符串的一部分

myeclipse下导入架包的两种方式

第一种:直接复制自己需要的架包,然后在myeclipse的项目工程下建立一个文件夹(注意不是src),取名为lib,全选lib中的文件,右键选择Build Path,选择Add to Build Path. 第二种:右键单击项目工程,选择最后的properties,在libraries下的右面选择Add library;选择user library,进入后单击user libraries,再单击New为自己的架包取名,最后add jars选择自己需要的架包放入.