前言

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

例子

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

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. 基于Vite+React构建在线Excel

    Vite是随着Vue3一起发布的一款新型前端构建工具,能够显著的提升前端开发体验,它主要由两部分组成: (1)一个开发服务器,它基于**原生ES模块提供了丰富的内建功能,如速度快到惊人的 模块热更新( ...

  2. 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能

    158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能 一.背景 最近对 Power BI 中使用 SVG 比较感兴趣,今天我们使用 DAX + SVG 复刻一下 Ze ...

  3. Git代码提交报错 (Your branch is up to date with 'origin/master)

    一.前言 今天码云上提交自己本地的一个SpringBoot+Vue的小项目,由于前端代码提交第一次时候提交码云上文件夹下为空,于是自己将本地代码复制到码云拉取下来代码文件夹下,然而git add . ...

  4. 20行python代码,轻松获取各路小说,非常简单

    哔哔两句 作为现代青年,我相信应该没几个没看过小说的吧,嘿嘿~ 一般来说咱们书荒的时候怎么办?自然是去起某点排行榜先找到小说名字,然后再找度娘一搜,哎 ,笔趣阁就出来答案了,美滋滋~但是那多麻烦,咱们 ...

  5. [.NET6]使用ML.NET+ONNX预训练模型整活B站经典《华强买瓜》

    最近在看微软开源的机器学习框架ML.NET使用别人的预训练模型(开放神经网络交换格式.onnx)来识别图像,然后逛github发现一个好玩的repo.决定整活一期博客. 首先还是稍微科普一下机器学习相 ...

  6. 记一次 .NET 差旅管理后台 CPU 爆高分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的 web 系统 cpu 运行一段时候后就爆高了,让我帮忙看一下是怎么回事,那就看吧,声明一下,我看 dump 是免费的,主要是锤炼自己技术 ...

  7. 用 40 块搞个游戏机「GitHub 热点速览 v.22.27」

    作者:HelloGitHub-小鱼干 最便宜的小霸王游戏机都超过了五十,但是现在有了 PicoBoot 你用 40 块的树莓派就能搞出个任天堂游戏机(NGC).PicoBoot 替换了 NGC 的 I ...

  8. CMU15445 (Fall 2019) 之 Project#2 - Hash Table 详解

    前言 该实验要求实现一个基于线性探测法的哈希表,但是与直接放在内存中的哈希表不同的是,该实验假设哈希表非常大,无法整个放入内存中,因此需要将哈希表进行分割,将多个键值对放在一个 Page 中,然后搭配 ...

  9. final关键字概念与四种用法和final关键字用于修饰类和成员方法

    fifinal关键字 概述 学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写.那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的.为了避免这种随意改写 ...

  10. @Async注解的坑,小心

    大家好,我是三友. 背景 前段时间,一个同事小姐姐跟我说她的项目起不来了,让我帮忙看一下,本着助人为乐的精神,这个忙肯定要去帮. 于是,我在她的控制台发现了如下的异常信息: Exception in ...