PostgreSQL 分区表一点也不差
MYSQL 在分区表上的缺失不同,POSTGRESQL 的分区表那算是“硬可”。PG11 已经推出了HASH 分区。具体操作是怎样
首先分区表的大致用途有那些
1 在符合业务的基础上,能对合理的预设的查询提高查询的速度
2 在符合业务的基础上,能对数据的插入降低热点块的竞争,提高插入速度
3 在某些场合合理的访问分区可能顺序的扫描分区内的数据比使用分区内的索引更能提高数据访问的性能。
4 合理的设置分区,会更方便处理无用的数据,统一将一个分区内的数据进行处理。
目前 POSTGRESQL 支持的分区方式有
1 Range Partitiioning
2 List Partitioning
3 Hash Partitioning
与ORACLE 差不多的是,每个分区也是可以有自己的子分区的索引,默认值,或者一些其他定义。
另外一件事情是分区这个事情是需要有预先的设计的,而不是在系统的数据库表已经运行了好长一段时间后,在去做分区表。所以在系统设计之初就做好设计工作是重要的。
下面我们就来做点什么
1 HASH Partitioning 这是在 PG 11 中的新功能 ,通过HASH partitioning 可以加速数据的插入,这也是ORACLE DBA 引以为豪的傲娇点。
下面建立一个HASH分区表,这里已BIGINT 为主键,插入的主键除以10后余数来选择记录的落点。
后面直接插入20万数据不到1 秒就完成了
我们来看看插入的数据,基本上都打散了。
查询也是没有问题,走了主键的索引
而清除一个分区表的数据也很简单,直接删除那个表就可以了
如果想继续恢复那个分区也是很容易的事情
当然如果你想保留数据分区表的部分数据,但又不想他成为分区表中的一员也很简单。
同时PostgreSQL 也同样支持range 分区的类型,通过range 类型的分区可以根据已经设计好的日期,或者其他表中的行数据进行划分,进行分区表存储。
废话不说,建立相关的表和分区表
在建立日期类型的分区表中,要注意到to 是不包含后面指定的时间段,如果设置成 from ('2008-01-01') to ('2008-12-31') 下一个range 设置成 from ('2019-01-01') to ('2019-12-31') 则在插入数据的时候会报
no partition of relation found for row
的问题。
另一个问题是,建立分区表的时候(Postgresql 不建议建立主键,这样会引起以后必要的麻烦,如果需要可以建立唯一索引)
创建一个存储过程来进行数据的插入,看看分区表是否有问题
create or replace procedure insert_data()
language plpgsql
as $$
declare
date_value timestamp;
declare id int;
begin
date_value := '2007-01-01 00:00:00'::timestamp + '1 hour';
id = 1;
while id < 400000 loop
insert into range_test (password,insert_date) (select id::char(48),date_value::timestamp);
id = id + 1;
date_value := date_value::timestamp + '1 hour';
end loop;
end;
$$;
通过图中的两条语句来进行数据的验证,没有问题。
根据查询的要求我们还可以建立相关的分区索引
当然如果全表查询,也可以走全局的索引
PostgreSQL 分区表一点也不差相关推荐
- PostgreSQL 分区表教程
由于数据库中存储了大量数据,性能和可伸缩性是受到影响的两个主要因素.随着加载表数据的增加,需要更多的数据扫描.页交换到内存,以及其他表操作成本也会增加.分区可能是一个很好的解决方案,因为它可以将一个大 ...
- PostgreSQL分区表(partitioning)应用实例详解
https://www.jb51.net/article/97937.htm PostgreSQL分区表(partitioning)应用实例详解 更新时间:2016年11月22日 10:25:58 ...
- PostgreSQL 分区表, pg_pathman ,PostgreSQL 10介绍及性能对比(转载)
转载自:https://my.oschina.net/yonj1e/blog/868402 PostgreSQL 分区表, pg_pathman ,PostgreSQL 10介绍及性能对比 原 yon ...
- PostgreSQL分区表
PostgreSQL分区表 声明:内容转载别处,觉得有用就分享了出来 为什么需要分区表? 首先我们需要思考一个问题,为什么需要分区表? 是因为Big Table的性能差,而且容量有上限,所以才需要分而 ...
- 【原创】POSTGRESQL 分区表初次体验
POSTGRESQL的分区和MYSQL不同,MYSQL是有专门的分区表, 而POSTGRESQL的分区则利用它本身的面向对象的特性来做. 下面我们来简单的体验下. 我们先创建一张父表. 记住,所有的分 ...
- PostgreSQL分区表(partitioning)应用实例
前言 项目中有需求要垂直分表,即按照时间区间将数据拆分到n个表中,PostgreSQL提供了分区表的功能.分区表实际上是把逻辑上的一个大表分割成物理上的几小块,提供了很多好处,比如: 查询性能大幅提升 ...
- PostgreSQL 分区表性能优化-分区键
目录 前言 优化过程 数据库版本 总体思路 分区键 前言 近期优化SQL的次数越来越多了,优化的思路可以从SQL结构.执行计划.统计信息.执行计划缓存.索引合理性(数据离散度.联合索引等).程序的数据 ...
- PostgreSQL分区表的执行计划
开始 比如说我已经做好了对分区表的规则: postgres=# CREATE OR REPLACE FUNCTION ptest_insert_trigger() RETURNS TRIGGER AS ...
- PostgreSql 分区表
一.概述 分区表指的是将逻辑上的一个大表分成一些物理上的小文件. 一个表何种情况下需要设计成分区表,取决于应用,一个经验法则是当表的尺寸超过了数据库服务器物理内存时,设计为分区表是有利的. 二.优势: ...
最新文章
- 江苏机器人竞赛南航_中国青少年机器人竞赛
- python pynlpir NLPIR许可证过期问题【RuntimeError: NLPIR function ‘NLPIR_Init‘ failed.】
- ​如何编写高质量的C#代码(一)
- 烧录imx6需要的linux空间,IMX6Q学习笔记——开发板的Linux系统更新和烧录
- Java多线程(6)--Callable接口创建线程
- HTML DOM之属性的各种操作方法
- 如何安装Windows 8系统中的telnet组件
- Linux查看最后一页日志,linux常用查看文件或日志命令
- python给excel排序_python初学—-实现excel里面读数据进行排序
- Maven镜像源汇总(含国内、国外)
- iOS 【iOS-切换控制器的手段及异同】
- LeetCode 分割整数数组,分割为两部分的和相等
- 计算机组成原理八位全加器,8位全加器-课程设计
- python计算复数的辐角,(Python 3)1051复数乘法(15分),python31051
- android手机操控及屏幕录制,手机操作视频记录 Android版屏幕录制
- python程序填空_pygame实现成语填空游戏
- 异常音检测(持续更新)
- 文字翻译软件哪个好用?亲测好用的软件分享
- python创建方法draw_【python设计模式-创建型】工厂方法模式
- 福州大学计算机学硕分数,2021年福州大学考研录取分数线应该在哪里查询?
热门文章
- android自定义涂鸦,Android Studio:小Demo-“涂鸦”
- 01 数据库和MySQL简介
- 日本最惨数学天才!37岁裸辞,房子被政府没收,向全村人乞讨,一家五口只能吃野菜.........
- Spring Boot Admin配置安全验证
- [机器学习导论]——第三课——神经网络Ⅱ
- 第四章css总结,第四章CSS层叠样式表分析.doc
- 如何处理表情字符入库问题
- 苹果系统itunes连iphone连不上服务器,itunes无法连接iphone的解决方法
- Spring MVC 之 DispatcherServlet之主题
- php上传文件失败解决方式