该pg_stats
表显示 PostgreSQL 在收集统计信息时存储了一个直方图。这意味着 PostgreSQL 可以通过计算包含过滤器值的直方图桶的数量来估计过滤器将返回多少行。您可以使用 增加直方图桶的数量,ALTER TABLE ... SET STATISTICS
这意味着 PostgreSQL 可以更精确地了解过滤器的选择性(估计更少的行)。
查询计划器估计执行查询所需完成的工作总量,并将其与阈值进行比较,以查看是否应该进行 JIT 查询编译。这个估计值是否包括 PostgreSQL 为筛选选择性目的而维护的行数估计值?当 JIT 编译的性能优势超过 JIT 编译的启动时间时,增加统计样本大小会让查询规划器做出更好的决策吗?
更精确的行数估计可能高于或低于不太精确的估计。如果我们提前知道哪种方式会更精确,我们可以(可能)做一些事情来使它更准确,而不需要更多的直方图箱。
是的,行数估计是总成本估计的重要部分,这就是与 jit_above_cost 进行比较的原因。因此,改变统计目标可以改变 JIT 决策,尽管很难提前预测改变的方向。就此而言,保持统计目标相同并仅重做随机样本(通过 ANALYZE)也可能会改变决定。
请注意,jit_above_cost 首先是一个非常松散的启发式方法。(而且我认为这是一个完全错误的观点——成本估算通常由 IO 估算主导,为什么要使用估算的 IO 时间来决定是否 JIT?这没有意义,除非在成本估算是没有被单独跟踪,我们不想改变它只是为了让 jit_above_cost 更加理智)