COUNT(1) 还是 COUNT(*) 对于 PostgreSQL 更好

L D*_*L D 6 sql postgresql count

我已经看到了其他数据库(MySQL、SQL Server 等)的这个问题的答案,但没有看到 PostgreSQL 的答案。那么,选择表的行数COUNT(1)是否更快/更好?COUNT(*)

Luk*_*der 9

对比差异

上次我对 PostgreSQL 11.3和PostgreSQL 11.3之间的差异进行基准测试COUNT(*)COUNT(1)时,我发现速度COUNT(*)快了大约 10%。Vik Fearing 当时的解释是,1正在为整个计数循环评估常量表达式(或至少其可空性)。我还没有检查这个问题是否已在 PostgreSQL 14 中修复。

在现实世界的查询中不用担心这个

但是,您不必担心这种性能差异。10% 的差异在基准测试中是可以测量的,但我怀疑您能否在普通查询中一致地测量这样的差异。此外,理想情况下,所有 SQL 供应商都以相同的方式优化这两件事,因为这1是一个常量表达式,因此可以被消除。正如上面文章中提到的,我在我测试过的任何其他 RDBMS(MySQL、Oracle、SQL Server)中找不到任何差异,并且我不希望有任何差异。

  • “*我还没有检查这是否已在 PostgreSQL 14 中修复*” - 我不这么认为。Postgres 开发人员并不真正认为值得付出努力:https://www.postgresql.org/message-id/flat/df354b76-a645-73fc-9645-4508e5291d71%40gmx.net (3认同)