梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks
假如 [分区表] 在字段 [createdate] 上进行分区,每个月为一个分区:
2009年6月为分区P200906
2009年7月为分区P200907
2009年8月为分区P200908
。。。

执行SQL 使用分区键检索:
select*from 分区表 t where createdate > to_date('2009-07-12','yyyy-mm-dd') and createdate < to_date('2009-08-12','yyyy-mm-dd')

执行计划如下,使用分区键进行索引,会自动在数据存在的区进行检索。因为开始区为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 < to_date('2009-08-12','yyyy-mm-dd')

执行计划如下:没有使用分区键进行检索,那么则会查询全部的表分区。因为要查询的数据就在2和3分区上,其它的分区数据也被读取了,增大了数据库压力,效率低下。
SELECT STATEMENT, GOAL = ALL_ROWS
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 < to_date('2009-08-12','yyyy-mm-dd')

执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE
SINGLE        Partition start=2    Partition stop=2
 
TABLE ACCESS FULL            Partition start=2    Partition stop=2
posted on 2011-06-12 16:03 HUIKK 阅读(577) 评论(1)  编辑  收藏 所属分类: DataBase

评论

# re: 分区查询 2014-12-11 11:53 半夏
很好、通欲易懂。一看就明白  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: