KingbaseES 多列分区的方法与性能
前言
对于多列分区,可以选择单级多列的范围分区,也可以选择范围加子分区的方式。但二者在不同场景下对于性能是有差异的,这里的性能差异主要是分区裁剪引起的差异。
例子
创建两张分区表,采取不同的分区策略:
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 多列分区的方法与性能的更多相关文章
- Oracle中对列加密的方法
Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...
- SQL Server 性能优化之——系统化方法提高性能
SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...
- 怎么设置Linux swap分区?方法教程
如何设置Linux swap分区 看到不少朋友问linux下swap分区的问题,收集到一篇 不错的文章 ,分享下. 什么是Swap?Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其 ...
- 设置/修改centos上的swap交换分区的方法
设置centos上的swap交换分区的方法 作为linux世界里最稳定的服务器版本,rhas5一直有很大的应用面,之前一直关注的是freebsd,因为应用的需要,特别在配合mysql和oracle上r ...
- Oracle 分区表管理之组合分区(分区索引失效与性能比较)
整体结构如下: Oracle 分区表管理之组合分区(分区索引失效与性能比较) 虽然老早就使用了分区表,终于有时间写有关分区表的内容:不是所有的场景数据量变大需要用到分区表,一般单表数据超过2g可以考 ...
- Windows xp Diskpart合并分区的方法
非常不错的合并分区的方法,经测试,好用,就是对于稳定性就不知道了,理论下应该没什么问题,对于个人电脑合并分区和服务器分区合并来说,无疑是一个非常好的办法 分区增容就是当一个分区的空间不能满足使 ...
- Oracle 列数据聚合方法汇总
网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...
- python获取字母在字母表对应位置的几种方法及性能对比较
python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...
随机推荐
- UiPath选择器之动态选择器的介绍和使用
一.动态选择器的介绍 使用通配符, 能够替换字符串中的零个或多个字符的符号.这些在处理选择器中的动态更改的属性时非常有用. 二.动态选择器在UiPath中的使用 1.在设计库中新建一个Sequence ...
- RPA应用场景-信用卡交易争议后续流程
RPA应用场景-信用卡交易争议后续流程 场景概述 信用卡交易争议后续流程 所涉系统名称 客服系统,邮件 人工操作(时间/次) 4小时 所涉人工数量20操作频率 不定时 场景流程 1.RPA自动接收客户 ...
- C++库的随机数生成
C++库为我们提供了很多生成随机数的方法. 使用C的随机数生成法 先学过C语言,或者仅仅用C++做算法的人.对rand()是非常熟悉了.这个函数没有参数,生成0到RAND_MAX的随机数(RAND_M ...
- STM32 移植 RT-Thread 标准版的 FinSH 组件
一.移植准备 开发版STM32F10xC8T6 准备好移植RT-Thread的移植工程 没动手移植过RT-Thread的小伙伴,可以看RT-Thread移植到stm32 我这里是将控制台信息打印到串口 ...
- windows10 程序和功能没有Hyper-V选项
1.在电脑桌面新建Hyper-V.cmd文件,将如下代码添加到文件中 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*H ...
- docker安装node
#1.拉取镜像 docker pull node:latest #2.运行 docker run -itd --name node-test --restart=always node #--rest ...
- 复制docker容器中的nginx某个文件到linux中
前提:docker容器中的nginx要开启
- springboot的@ConditionalOnBean注解
上篇文章中分析了springboot的自动注入的原理,可在文章后面的推荐阅读中温习哦.在自动注入的原理那篇文章中提到了@ConditionalOnXX注解,今天来看下springboot中的@Co ...
- npm uninstall和rm直接删除的区别
结论: 1. npm uninstall会备份包本身依赖的node_modules,rm -f会删除整个目录 2. npm uninstall不会删除被依赖的包.即使显式要删除这个包,但它被依赖不会删 ...
- 挑战30天写操作系统-day3-进入32位模式并导入C语言
目录 1.制作真正的IPL IPL:启动区,启动程序装载器完整代码: ; haribote-ipl ; TAB=4 CYLS EQU 10 ; 声明CYLS=10 ORG 0x7c00 ; 指明程序装 ...