达梦数据库日常使用 — 表分区

在日常使用达梦数据时,可能遇到的各种场景。下面讲解表分区


  1. 获取数据库表空间名称
SELECT
    TABLESPACE_NAME
FROM
    DBA_TABLESPACES;


行号       TABLESPACE_NAME
---------- ---------------
1          SYSTEM
2          ROLL
3          TEMP
4          MAIN
5          HMAIN

已用时间: 25.005(毫秒). 执行号:25968.

  1. 创建表
    描述:根据一个查询,获取表空间。在创建表的时候就指定使用 “MAIN”
  • PARTITION "P202512":定义一个名为 P202512 的分区。
  • VALUES LESS THAN(DATETIME'2025-12-01 00:00:00'):表示该分区将存储所有小于 2025-12-01 00:00:00 的 DATETIME 值的数据。这属于 RANGE 分区 的定义方式,用于按时间范围划分数据。
  • STORAGE(ON "MAIN", CLUSTERBTR):指定该分区的存储位置和存储方式。ON "MAIN" 表示数据存储在名为 MAIN 的表空间中;CLUSTERBTR 表示使用簇存储方式,通常用于提高查询性能。
DROP TABLE 模式名.表名;
CREATE TABLE 模式名.表名 (
"ID" VARCHAR(30) NOT NULL,
"CITY" VARCHAR(128) NOT NULL,
"DATATIME" DATETIME(6) NOT NULL
)
PARTITION BY RANGE("DATATIME")
(
PARTITION  "P202501"  VALUES LESS THAN(DATETIME'2025-01-01 00:00:00'),
PARTITION  "P202502"  VALUES LESS THAN(DATETIME'2025-02-01 00:00:00'),
PARTITION  "P202503"  VALUES LESS THAN(DATETIME'2025-03-01 00:00:00'),
PARTITION  "P202504"  VALUES LESS THAN(DATETIME'2025-04-01 00:00:00'),
PARTITION  "P202505"  VALUES LESS THAN(DATETIME'2025-05-01 00:00:00'),
PARTITION  "P202506"  VALUES LESS THAN(DATETIME'2025-06-01 00:00:00'),
PARTITION  "P202507"  VALUES LESS THAN(DATETIME'2025-07-01 00:00:00'),
PARTITION  "P202508"  VALUES LESS THAN(DATETIME'2025-08-01 00:00:00'),
PARTITION  "P202509"  VALUES LESS THAN(DATETIME'2025-09-01 00:00:00'),
PARTITION  "P202510"  VALUES LESS THAN(DATETIME'2025-10-01 00:00:00'),
PARTITION  "P202511"  VALUES LESS THAN(DATETIME'2025-11-01 00:00:00'),
PARTITION  "P202512"  VALUES LESS THAN(DATETIME'2025-12-01 00:00:00')
) STORAGE(ON "MAIN", CLUSTERBTR);

COMMENT ON TABLE 模式名.表名 IS '表注释';
COMMENT ON COLUMN 模式名.表名."ID" IS '对象ID';
COMMENT ON COLUMN 模式名.表名."CITY" IS '地市';
COMMENT ON COLUMN 模式名.表名."DATATIME" IS '数据时间';

  1. 表分区:
    描述:日常工作中,偶尔会遇到大数据量的表,此时就会考虑给表进行分区,通常会根据时间进行,
    新增表分区:
-- 幂等性,
ALTER TABLE 模式名.表名 DROP PARTITION P202503;

-- 有边界值
ALTER TABLE 模式名.表名 
ADD PARTITION P202503 VALUES LESS THAN (DATETIME'2025-03-01 00:00:00');


  1. 查询对应模式名下所有分区情况
    描述:在建立表分区的时候,可能没有考虑到往后的情况。当分区表变多后,分区信息可能会有误差。使用语句查出所有信息,然后再根据实际情况进行新增
    (笔者在生产环境中真实遇到了一个老大哥留下的坑,客户现场有近半个月的数据同步后,数据库中却没有。查询信息后发现那张表的表分区边界时间截止到上个月,导致这个月的数据都没有入库)
SELECT 
    a.TABLE_NAME,
    a.PARTITION_NAME,
    a.PARTITION_POSITION,
    a.TABLESPACE_NAME,
    a.HIGH_VALUE
FROM 
    DBA_TAB_PARTITIONS a
WHERE 
    a.TABLE_OWNER = 模式名
ORDER BY 
    a.TABLE_NAME, a.PARTITION_POSITION;
posted @ 2025-07-22 15:33  奋斗中de小伙有潜力  阅读(125)  评论(0)    收藏  举报