深入原理:分区剪裁特性剖析

小鱼(邓秋爽)

云和恩墨专家,有超过5年超大型数据库专业服务经验,擅长oracle 数据库优化,SQL优化和troubleshooting

编辑手记:深入学习分区表的特性,更好地设计分区表的表结构

做表结构设计时我们经常会将大表做分区或者分表规划,oracle数据库中由于非常强大的分区功能可以不用分表的办法而直接使用分区表来规划,而我们使用分区表一个很重要的特性就是分区裁剪,这里将对分区表的分区裁剪简单的分析和探究:

分区剪裁就是对于分区表或者分区索引来说,优化器可以自动从from和where中根据分区键直接提取出需要访问的分区,从而避免扫描所有的分区,降低了IO请求。分区剪裁可以细分为静态分区剪裁和动态分区剪裁,其中静态分区剪裁发生在sql语句编译阶段,而动态分区剪裁则发生在sql语句执行阶段,对于分区键是常量值优化器在会走静态分区剪裁的,如果分区键是变量形式优化器只会走动态分区剪裁。

静态分区剪裁:

执行计划

统计信息:

Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 3 consistent gets 0 physical reads 0 redo size 1665 bytes sent via SQL*Net to client 509 bytes received via SQL*Net from client 1 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 0 rows processed

静态分区剪裁中pstart和pstop都是具体的分区编号值,比如这里分区剪裁就是走编号31的分区

动态分区剪裁:

我们来看执行计划

动态分区剪裁执行计划中pstart、pstop都是key的形式,这里扫描的分区无法确定,因为有变量的因素导致无法确定recdate分区键的范围,所以这里的pstart和pstop都是key形式

上面动态分区剪裁中:表CS_CUST_ORDER是以region+recdate的range分区,sql语句中由于只有region条件是静态值,而recdate是绑定变量的形式,优化器这里走的分区剪裁分为两部分:通过region条件的谓词走静态分区剪裁;通过recdate条件的谓词走动态分区剪裁。

静态分区剪裁和动态分区剪裁在IO性能上是否有差异:

执行计划

统计信息如下:

Statistics ---------------------------------------------------------- 1 recursive calls 0 db block gets 3 consistent gets 0 physical reads 0 redo size 1665 bytes sent via SQL*Net to client 509 bytes received via SQL*Net from client 1 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 0 rows processed

这里看出来静态和动态分区剪裁在IO性能上并没有差异。

如果分区键被用作表达式或者函数运算,将导致优化器无法走分区剪裁,这个跟索引列被用作表达式或者函数运算一样:

SQL> create table t_local01 partition by range(object_id) 2 (partition p1 values less than(10000), 3 partition p2 values less than(20000), 4 partition p3 values less than(30000), 5 partition p4 values less than(40000), 6 partition p5 values less than(maxvalue)) 7 as select * from dba_objects; Table created. SQL> create index ind_dataobjid on t_local01(data_object_id) local; Index created. SQL> select * from t_local01 where object_id<10000 and data_object_id=110;

我们来看执行计划:

(1)

(2)

(3)

(4)

------The end

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-08-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4888
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577
来自专栏魂祭心

原 canvas绘制clock

4094
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3145
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5476
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4667
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2182
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2536
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7

扫码关注云+社区