热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ORACLE分区表的查询

ORACLE分区表的查询假如[分区表]在字段[createdate]上进行分区,每个月为一个分区:2009年6月为分区P2009062009年7月为分区P2009072009年8月为分区P200908。。。www.2cto.com执行SQL使用分区键检索...SyntaxHigh

ORACLE分区表的查询
 
假如 [分区表] 在字段 [createdate] 上进行分区,每个月为一个分区:
2009年6月为分区P200906
2009年7月为分区P200907
2009年8月为分区P200908
。。。
  www.2cto.com  
执行SQL 使用分区键检索:
select*from 分区表 t where createdate > to_date('2009-07-12','yyyy-mm-dd') and createdate
 
执行计划如下,使用分区键进行索引,会自动在数据存在的区进行检索。因为开始区为2,结束区为3,一目了然。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ITERATOR    Partition start=2    Partition stop=3
  TABLE ACCESS FULL            Partition start=2    Partition stop=3
 
执行SQL 不使用分区键检索:
select*from 分区表 t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date
 
执行计划如下:没有使用分区键进行检索,那么则会查询全部的表分区。因为要查询的数据就在2和3分区上,其它的分区数据也被读取了,增大了数据库压力,效率低下。
SELECT STATEMENT, GOAL = ALL_ROWS  www.2cto.com  
PARTITION RANGE ALL        Partition start=1    Partition stop=31
  TABLE ACCESS FULL            Partition start=1    Partition stop=31
 
执行SQL 指定使用分区:
select*from 分区表 partition(P200907) t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date
 
执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE SINGLE        Partition start=2    Partition stop=2
  TABLE ACCESS FULL            Partition start=2    Partition stop=2
 
 
 
作者 蓝红石

推荐阅读
author-avatar
多米音乐_34363545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有