免费自己制作网站教程,网站文字格式,福州专业网站制作设计,中铁建设集团有限公司有多少个局由于大量数据存储在数据库同一张表中#xff0c;后期性能和扩展会受到影响。所以需要进行表分区#xff0c;因为它可以将大表分成较小的表#xff0c;从而减少内存交换问题和表扫描#xff0c;最终提高性能。庞大的数据集被分成更小的分区#xff0c;更易于访问和管理。
… 由于大量数据存储在数据库同一张表中后期性能和扩展会受到影响。所以需要进行表分区因为它可以将大表分成较小的表从而减少内存交换问题和表扫描最终提高性能。庞大的数据集被分成更小的分区更易于访问和管理。
什么是 PGSQL
PGSQL 是一个开源关系数据库系统。它支持关系 (SQL) 和非关系 (JSON) 查询。它被用作基于 Web 、移动和分析应用程序的主要数据库。
以下是 PGSQL 的一些常见用例 LAPPLinux、Apache、PostgreSQL 和 PHP堆栈中的强大数据库。 地理空间数据库。 通用事务数据库。
PGSQL的主要特性 用户定义的数据类型PGSQL 可以扩展以创建用户定义的数据类型。 复杂的锁定机制存在三种锁定机制行级锁、表级锁和资询锁。 表继承PGSQL 允许基于另一个表创建子表。 Foreign Key Referential Integrity指定外键值对应于另一个表中的实际主键值。
嵌套事务保存这意味着子查询的结果不会在其父查询回滚时回滚。但是对于保存若顶层事务被回滚所有的保存点也会被回滚。
什么是 PGSQL 分区
分区是指将一个大表拆分成更小的物理块这些块可以根据其用途存储在不同的存储介质中。每个部分都有其特点和名称。分区有助于提高数据库服务器的性能因为需要读取、处理和返回的行数明显减少。您还可以使用 PostgreSQL 分区来划分索引和索引表。
PGSQL 分区主要有两种类型垂直分区和水平分区。在垂直分区中我们按列划分在水平分区中我们按行划分。
水平分区涉及将不同的行放入不同的表中。例如您将 18 岁以上学生的详细信息存储在一个分区中将 18 岁以下的学生详细信息存储在另一个分区中。可以在两个分区上创建联合视图以显示所有学生。
垂直分区包括创建列较少的表并使用其他表来存储剩余的列。规范化还涉及到跨表的列分割但是垂直分区不仅限于此甚至在已经规范化的情况下还会对列进行分区。
如何创建分区表
简单描述一下自己创建分区表的步骤水平按创建时间分区 1. 创建主表 分区键order_created_time
CREATE TABLE mac_id_new (id int8,created_by varchar(255) COLLATE pg_catalog.default,created_time timestamp(6),last_modified_by varchar(255) COLLATE pg_catalog.default,last_modified_time timestamp(6),deleted bool,deleted_by varchar(255) COLLATE pg_catalog.default,deleted_time timestamp(6),optimistic_locking_version int8,order_id int8,order_created_time timestamp(6)
) PARTITION by range(order_created_time);
2.创建分区表函数
CREATE OR REPLACE FUNCTION f_create_partition_table(t_name VARCHAR,bengin_date TIMESTAMP ,end_date TIMESTAMP)
RETURNS boolean AS $$
DECLAREcreate_partition_table_sql varchar(1024);create_table_index_sql varchar(1024);create_table_pk_sql varchar(1024);bengin_date_str varchar(64);end_date_str varchar(64);query_partition_table_sql varchar(1024);t_row record;
beginbengin_date_str : to_char(bengin_date,YYYYMMDD);end_date_str : to_char(end_date,YYYYMMDD);create_partition_table_sql : create table if not exists || t_name ||_ || bengin_date_str || _ || end_date_str || partition of ||t_name || for values from (|| bengin_date ||) || to (|| end_date ||);create_table_index_sql : CREATE INDEX IF NOT EXISTS idx_|| t_name ||_|| bengin_date_str || _ || end_date_str ||_business_id ON || t_name ||_|| bengin_date_str || _ || end_date_str || USING btree (business_id);;create_table_pk_sql : ALTER TABLE || t_name ||_ || bengin_date_str || _ || end_date_str || ADD CONSTRAINT || t_name ||_ || bengin_date_str || _ || end_date_str ||_PK PRIMARY KEY (id);;execute create_partition_table_sql;execute create_table_index_sql;execute create_table_pk_sql;return true;
end;
$$ LANGUAGE plpgsql;
3.创建分区表执行后刷新数据库在表mac_id_new下查看验证分区表
SELECT f_create_partition_table(mac_id_new,2023-07-01,2024-01-01);
SELECT f_create_partition_table(mac_id_new,2024-01-01,2024-07-01);
SELECT f_create_partition_table(mac_id_new,2024-07-01,2025-01-01);
SELECT f_create_partition_table(mac_id_new,2025-01-01,2025-07-01);
SELECT f_create_partition_table(mac_id_new,2025-07-01,2026-01-01); 最后进行数据迁移数据校验至此分区表创建完成