前言

对于多列分区,可以选择单级多列的范围分区,也可以选择范围加子分区的方式。但二者在不同场景下对于性能是有差异的,这里的性能差异主要是分区裁剪引起的差异。

例子

创建两张分区表,采取不同的分区策略:

create table t1_part_ranage(id1 integer,id2 integer, name text)
partition by range(id1,id2)
(
partition p_1_1 values less than(1,2),
partition p_1_2 values less than(1,3),
partition p_1_3 values less than(1,4),
partition p_1_4 values less than(1,maxvalue),
partition p_2_1 values less than(2,2),
partition p_2_2 values less than(2,3),
partition p_2_3 values less than(2,4),
partition p_2_4 values less than(2,maxvalue),
partition p_3_1 values less than(3,2),
partition p_3_2 values less than(3,3),
partition p_3_3 values less than(3,4),
partition p_3_4 values less than(3,maxvalue)
); create table t1_part_list(id1 integer,id2 integer, name text)
partition by range(id1) subpartition by list(id2)
subpartition template
(
subpartition sub_1 values(1),
subpartition sub_2 values(2),
subpartition sub_3 values(3),
subpartition sub_4 values(default)
)
(
partition p_1 values less than(2),
partition p_2 values less than(3),
partition p_3 values less than(4)
);

  t1_part_ranage 采取的单级多列范围分区,t1_part_list 采用的是两级范围+列表分区。二者当第一个分区列值未提供情况时,分区裁剪是有差异的。

分区裁剪差异

范围分区裁剪:当 id1 分区列条件未提供时,需要扫描所有分区。

test=# explain select * from t1_part_ranage where id2=3;
QUERY PLAN
----------------------------------------------------------------------------
Append (cost=0.00..298.86 rows=72 width=40)
-> Seq Scan on t1_part_ranage_p_1_1 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_1_2 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_1_3 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_1_4 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_2_1 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_2_2 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_2_3 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_2_4 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_3_1 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_3_2 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_3_3 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_ranage_p_3_4 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
(25 rows)

  

列表分区裁剪:当id1分区列条件未提供时,只需要扫描三个分区。

test=# explain select * from t1_part_list where id2=3;
QUERY PLAN
----------------------------------------------------------------------------------
Append (cost=0.00..74.72 rows=18 width=40)
-> Seq Scan on t1_part_list_p_1_p_1_sub_3 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_list_p_2_p_2_sub_3 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
-> Seq Scan on t1_part_list_p_3_p_3_sub_3 (cost=0.00..24.88 rows=6 width=40)
Filter: (id2 = 3)
(7 rows)

  

KingbaseES 多列分区的方法与性能的更多相关文章

  1. Oracle中对列加密的方法

    Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...

  2. 不同版本的SQL Server之间数据导出导入的方法及性能比较

    原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...

  3. SQL Server 性能优化之——系统化方法提高性能

    SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...

  4. 怎么设置Linux swap分区?方法教程

    如何设置Linux swap分区 看到不少朋友问linux下swap分区的问题,收集到一篇 不错的文章 ,分享下. 什么是Swap?Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其 ...

  5. 设置/修改centos上的swap交换分区的方法

    设置centos上的swap交换分区的方法 作为linux世界里最稳定的服务器版本,rhas5一直有很大的应用面,之前一直关注的是freebsd,因为应用的需要,特别在配合mysql和oracle上r ...

  6. Oracle 分区表管理之组合分区(分区索引失效与性能比较)

    整体结构如下: Oracle  分区表管理之组合分区(分区索引失效与性能比较) 虽然老早就使用了分区表,终于有时间写有关分区表的内容:不是所有的场景数据量变大需要用到分区表,一般单表数据超过2g可以考 ...

  7. Windows xp Diskpart合并分区的方法

    非常不错的合并分区的方法,经测试,好用,就是对于稳定性就不知道了,理论下应该没什么问题,对于个人电脑合并分区和服务器分区合并来说,无疑是一个非常好的办法     分区增容就是当一个分区的空间不能满足使 ...

  8. Oracle 列数据聚合方法汇总

    网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...

  9. python获取字母在字母表对应位置的几种方法及性能对比较

    python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...

随机推荐

  1. SAP Picture Control(图片加载)

    Screen display 效果 源代码 program sap_picture_demo. set screen 200. TYPE-POOLS cndp. ******************* ...

  2. 飞鱼CRM

    直接放干货吧,今日头条飞鱼CRM的PHP调用方法,点我跳转. 很简单的两个方法,加密时重要的是有一个空格,必须要有,这个也是坑了我很长时间的一个坑. 接下来具体说一下飞鱼CRM系统接口加密的方法. & ...

  3. 关于使用netstat -lantup查看的SSHD 6010端口解释

    关于使用netstat -lantup查看的SSHD 6010端口解释: 1.使用netstat -lantup查看当前系统开启的服务端口 tcp6       0      0 ::1:6010   ...

  4. AOP-动态代理

    动态代理的原理代理设计模式的原理:使用一个代理将原本对象包装起来,然后用该代理对象"取代"原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象 ...

  5. API概述,使用步骤和Scanner概述及其API文档的使用

    API概述 API(Application Programming Interface),应用程序编程接口.Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档.这些类将底 ...

  6. 最强人工智能 OpenAI 极简教程

    大家好哇,新同学都叫我张北海,老同学都叫我老胡,其实是一个人,只是我特别喜欢章北海这个<三体>中的人物,张是错别字. 上个月安利了一波:机器学习自动补全代(hán)码(shù)神器,然后就 ...

  7. python requests 使用代理池访问https站点返回乱码

    问题表现: 检查一下正常的请求头里面accept-encoding字段是否包含br,如果包含,果断pip install urllib3[brotli],详见ssl-warnings 记录另外一个问题 ...

  8. docker容器管理操作

    Docker容器的四种状态: 运行 已暂停 重新启动 已退出 1.容器的创建 容器创建:就是将镜像加载到容器的过程. 创建容器时如果没有指定容器名称,系统会自动创建一个名称. 新创建的容器默认处于停止 ...

  9. 零基础学Java(9)在mac上运行命令行提示"找不到或无法加载主类"

    天坑 遇到的问题:使用命令行执行命令:java EightSample,会报以下错误 错误: 找不到或无法加载主类 EightSample 运行环境 mac系统 IntelliJ IDEA编译器 Ja ...

  10. Python常用基础语法知识点大全

    记得我是数学系的,大二时候因为参加数学建模,学习Python爬虫,去图书馆借了一本Python基础书,不厚,因为有matlab和C语言基础,这本书一个星期看完了,学完后感觉Python入门很快,然后要 ...