今天看啥  ›  专栏  ›  digoal德哥

count(*) 比 count(1) 快

digoal德哥  · 公众号  · 数据库  · 2026-01-06 11:57
    

主要观点总结

本文介绍了PostgreSQL 19 preview中对COUNT函数性能的优化。当表达式包含非空列且没有ORDER BY或DISTINCT子句时,COUNT(expression)可以转换为COUNT(*)以提高性能。

关键观点总结

关键观点1: 核心优化内容

该补丁允许查询规划器在特定条件下将COUNT(非空表达式)自动重写为COUNT(*),从而提高性能。优化的条件是表达式保证非NULL且COUNT()调用中不包含ORDER BY或DISTINCT子句。

关键观点2: 实现机制

为了实施这种优化,引入了SupportRequestSimplifyAggref类型,并添加了支持函数来执行COUNT(ANY)到COUNT(*)的转换逻辑。

关键观点3: 附带优化和影响

该补丁还调整了expr_is_nonnullable()函数,使其能够正确处理常量值。此外,改进导致执行计划变得更简洁,某些无用过滤器被移除。


免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址: 访问原文地址 (快捷配置)
总结与预览地址:访问文章预览/总结
文章地址: 访问文章快照