021.PGSQL-调优3-审视和修改表定义:存储模型、分布方式、分布列、分区表、数据类型

1.选择存储模型(列式、行式)

行存:点查询(返回记录少,基于索引的简单查询)

    增删改比较多

列存:统计分析类查询 (group 、join多)

    即席查询(查询列不确定,行存无法确定索引)

 

2.选择分布方式

hash  散列在集群的各DN实例上

replication 集群中每个DN实例上都有一份全量表数据

 

建表时,最后加上  (   )distribute by hash(rid);

 

3.选择分布列

列值比较离散的作为分布列,支持多分布列,防止出现数据倾斜

检查是否出现数据倾斜

select 
xc_node_id -- DN
, count(1) from tablename group by xc_node_id order by xc_node_id desc;

不同DN相差超过5% 视为数据倾斜,超过10%必须要调整

4.使用局部聚簇

 

5.使用分区表

  • 创建表空间
    CREATE TABLESPACE example1 RELATIVE LOCATION 'tablespace1/tablespace_1';
    CREATE TABLESPACE example2 RELATIVE LOCATION 'tablespace2/tablespace_2';
    CREATE TABLESPACE example3 RELATIVE LOCATION 'tablespace3/tablespace_3';
    CREATE TABLESPACE example4 RELATIVE LOCATION 'tablespace4/tablespace_4';

    当结果显示为如下信息,则表示创建成功。

    CREATE TABLESPACE
  • 创建分区表
    CREATE TABLE tpcds.customer_address
    (
        ca_address_sk       integer                  NOT NULL   ,
        ca_address_id       character(16)            NOT NULL   ,
        ca_street_number    character(10)                       ,
        ca_street_name      character varying(60)               ,
        ca_street_type      character(15)                       ,
        ca_suite_number     character(10)                       ,
        ca_city             character varying(60)               ,
        ca_county           character varying(30)               ,
        ca_state            character(2)                        ,
        ca_zip              character(10)                       ,
        ca_country           character varying(20)               ,
        ca_gmt_offset       numeric(5,2)                        ,
        ca_location_type    character(20)
    )
    TABLESPACE example1
    DISTRIBUTE BY HASH (ca_address_sk)
    PARTITION BY RANGE (ca_address_sk)
    (
            PARTITION P1 VALUES LESS THAN(5000),
            PARTITION P2 VALUES LESS THAN(10000),
            PARTITION P3 VALUES LESS THAN(15000),
            PARTITION P4 VALUES LESS THAN(20000),
            PARTITION P5 VALUES LESS THAN(25000),
            PARTITION P6 VALUES LESS THAN(30000),
            PARTITION P7 VALUES LESS THAN(40000),
            PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE example2
    )
    ENABLE ROW MOVEMENT;

6.选择数据类型

如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint

表关联列尽量使用相同的数据类型

 

posted @   star521  阅读(528)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示