Oracle分区裁剪特性

Oracle的分区是一个经常被使用的功能,在OLTP业务中,对于数据量上亿的表是非常有效率的。在分区表中分区裁剪的特性更是将大表查询做到了性能上的极致。

1.分区裁剪

分为静态和动态:简单理解条件为静态值时为静态裁剪,为动态值时为动态裁剪。

动态的情况可有以下几种情况:

  • 绑定变量值
  • 分区修剪的条件来至一个子查询的结果
  • 优化器利用星型转换重写了查询,而分区修剪发生在转换以后
  • 最有效的执行计划是一个NESTED LOOP

2. 如何判断是否是分区裁剪

是否用到分区裁剪,主要看执行计划中pstart,pstop值得范围。可通过explain plan for

  • 分区键如果用表达式或者函数,则不会走分区裁剪。这是pstart,pstop的值将会是是所有分区~

3. 小实验

1
2
3
4
5
6
7
 create table t_local01 partition by range(object_id)
        (partition p1 values less than(10000),
        partition p2 values less than(20000),
        partition p3 values less than(30000),
        partition p4 values less than(40000),
        partition p5 values less than(maxvalue))
        as select * from dba_objects;
1
create index ind1 on t_local01(data_object_id) local;
1
2
3
4
explain plan for select * from t_local01 
where object_id>=25000 and object_id <=28000 and data_object_id=29;

select * from table(dbms_xplan.display());
updatedupdated2023-12-142023-12-14