1. 需求:
公司用到了行云数据库(国产库),属实有点哪个。
因为数据量太大,需要进行优化,这里采用的是数据库分区来优化。
2. 分区概念:
数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数据库的频繁IO压力值,分区的优点如下:
1、相对于单个文件系统或是硬盘,分区可以存储更多的数据;
2、数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可;
3、精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率;
4、可跨多个分区磁盘查询,来提高查询的吞吐量;
5、在涉及聚合函数查询时,可以很容易进行数据的合并;
3. 创建分区表:
这里是根据时间戳进行分区,即一天的数据 一个分区。
大家可以根据自己的实际数据来进行分区。
CREATE TABLE YJY.TEST
(
TIMEST VARCHAR(12),
EPARCHY_CODE VARCHAR (12),
EPARCHY_NAME VARCHAR (15),
AREA_CODE VARCHAR (30),
AREA_NAME VARCHAR (150)
)
PARTITIONED BY (TIMEST);
4. 添加一个分区(创建一个分区)
刚刚只是创建一个具有分区功能的表,那么真正的分区还没创建,接下来创建分区:
内部表创建,即本地
ALTER TABLE YJY.TEST ADD PARTITION S20210330('20210330');
外部表创建,因为支持DBLINK,所以可外部创建
ALTER TABLE ext_table3 ADD PARTITION p1 (last_name = 'p1') WITH TABLE external_table @XCLOUD174;
5. 删除分区
删除指定分区,及分区内部的数据分片。删除一个分区不会影响其他的分区
ALTER TABLE YJY.TEST DROP PARTITION S20210330;
6. 清空分区
清空一个分区中的数据,保留分区、分片定义。
ALTER TABLE YJY.TEST TRUNCATE PARTITION S20210330;
7. 移动分区
将表的一个分区中的数据移动到内部表的一个分区中。
其中,desctable_name,descpar_name是目标表和目标分区;srctable_name,srcpar_name是来源表和来源分区。
ALTER TABLE test_user.temp_table ALTER PARTITION p_src EXCHANGE PARTITION p_desc WITH TABLE test_table;
8. 往分区中添加数据
将没有分区的表中的数据添加 到分区表中。
INSERT INTO YJY.TEST PARTITION ON(TIMEST = '20210330') select * from YJY.TEST2 where TIMEST='20210330';
如果有错误,希望大佬指出谢谢。