数据库表分区的优点有很多,也有很多文章有所介绍,本文就不赘述了
本文主要是提供数据库分表的操作步骤(也供自己将来需要时使用)
1.创建主表
通过指定PARTITION BY子句把measurement表创建为分区表,可选方法有:RANGE
、LIST
点击查看二者的区别,此处以RANGE
为例,以user_id
进行分区
CREATE TABLE t_user(
user_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (user_id);
建立分区主表时,不需要创建主键 点击查看详细原因,不需要建立索引。
2.创建分区
- 每个分区的定义必须指定对应于父表的分区方法和分区键的边界。注意,如果指定的边界使得新分区的值会与已有分区中的值重叠,则会导致错误。向父表中插入无法映射到任何现有分区的数据将会导致错误。
- 分区以普通PostgreSQL表(或者可能是外部表)的方式创建。可以为每个分区单独指定表空间和存储参数。
- 没有必要创建表约束来描述分区的分区边界条件。相反,只要需要引用分区约束时,分区约束会自动地隐式地从分区边界说明中生成。
# user_id在1-10的数据存储在此分区
CREATE TABLE t_user_p1 PARTITION OF t_user
FOR VALUES FROM ('1') TO ('100');
# user_id在10-20的数据存储在此分区
CREATE TABLE t_user_p2 PARTITION OF t_user
FOR VALUES FROM ('100') TO ('200');
# user_id在20-30的数据存储在此分区
CREATE TABLE t_user_p3 PARTITION OF t_user
FOR VALUES FROM ('200') TO ('300');
3.创建索引
在分区表的键列上创建一个索引,还有其他需要的索引(键索引并不是必需的,但是大部分场景中它都能很有帮助)。这会自动在每个分区上创建一个索引,并且后来创建或者附着的任何分区也将会包含索引
CREATE INDEX ON t_user(user_id);
4.插入数据
分区表创建完成,此时可以测试将数据插入
#插入数据,此数据将会被插入到p3分区中
INSERT INTO t_user VALUES(126, '2020-10-29', 0, 0);
#查询时,直接对主表进行查询,也可对p3查询
SELECT FROM t_user WHERE "user_id"=126;
SELECT FROM t_user_p3 WHERE "user_id"=126;
如果需要从一张已有数据的表导入数据,可以使用以下命令:
INSERT INTO t_user SELECT * FROM t_user_old;