小编mil*_*la1的帖子

尽管统计数据正确,为什么 PostgreSQL 的解释分析会错误地估计行数?

概括

\n

我正在 PostgreSQL 数据库上连接一个大表(约 600K 行)和一个较小的表(约 11K 行),并且需要通过描述性字段过滤结果集text

\n

当按bigint较小表的字段进行过滤时,优化器会正确估计结果行数,但是当按text小表的字段进行过滤时,优化器会低估结果行数数千倍,即使有 1- 1 两者之间的关系。

\n

我无法理解这种行为。

\n

整个环境,包括数据,都可以使用此 Pastebin中的说明进行设置。对于传统的在线模拟数据库来说太大了。

\n

环境

\n
select version();\n\n|version                                                                                            |\n|---------------------------------------------------------------------------------------------------|\n|PostgreSQL 13.6 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit|\n
Run Code Online (Sandbox Code Playgroud)\n

坐在 Azure 灵活服务器上。

\n

结构和数据

\n

表(11228 行):

\n
create table parent_tb as\nselect id, md5(random()::text) descr\nfrom generate_series(1::bigint,11228::bigint) as a(id);\n\nalter table parent_tb add primary key (id);\ncreate index idx_parent_tb_desc on parent_tb(descr);\n
Run Code Online (Sandbox Code Playgroud)\n

样本数据:

\n
select *\nfrom parent_tb\nlimit …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql postgresql-13

7
推荐指数
0
解决办法
729
查看次数

标签 统计

database ×1

postgresql ×1

postgresql-13 ×1

sql ×1