Postgresql扩展了统计数据,以获得更好的连接估计

zd287kbt  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(131)

嗨,我在PostgreSQL中得到了两个表,看起来像这样(高度简化):

create table main_table
(
    main_table_id         varchar(255) not null
        primary key,
    main_table_type       varchar(255)
);

create table join_table
(
    main_table_id   varchar(255) not null
        constraint fk_main_table_id
            references main_table,
    foreign_table_id           bigint       not null
        constraint fk_foreign_table_id
            references foreign_table
);

字符串
连接表中的外部ID数量高度依赖于main_table_type。某些类型是1:1,但其他类型在连接表中可能有数百行。这会导致在连接这些表时大大低估或高估。
有没有一种方法可以创建扩展的统计信息来改善这一点呢?我尝试将type列添加到连接表中,并在main_table_idmain_table_type上创建ndistinct统计信息,但不幸的是,这没有帮助。
连接表大约有50万行。
PostgreSQL版本是15。

5w9g7ksd

5w9g7ksd1#

当然,在PostgreSQL中生成扩展的统计数据可以帮助查询准备,就像在连接表中使用不同基数的情况一样。但是您的策略需要包罗万象。仅仅将type列添加到连接表并获得唯一的统计数据是不够的;要捕获组合分布,请考虑生成包含main_table_idmain_table_type的多列统计信息。此外,请确保您已经在main_tablejoin_table上执行了ANALYSE,以便给予PostgreSQL精确的数据分布信息。查询性能也可以通过研究物化视图,查询优化和PostgreSQL的成本参数来提高,以及通过索引经常使用的列。根据main_table_typejoin_table进行分区可能非常有益,这取决于您的工作负载有多复杂。要为您的特定数据和查询找到最佳策略,请尝试以下方法,关注查询性能并检查查询计划。
希望这对你有帮助,如果你需要更多的帮助,请告诉我。

相关问题