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

Is COUNT(1) or COUNT(*) better for PostgreSQL

我已经看到其他数据库(MySQL、SQL 服务器等)对这个问题的回答,但 PostgreSQL 没有。那么,COUNT(1) 还是 COUNT(*) faster/better 用于选择 table 的行数?

对比差异

我上次 benchmarked the difference between COUNT(*) and COUNT(1) for PostgreSQL 11.3, I've found that COUNT(*) was about 10% faster. The explanation by Vik Fearing at the time 一直在为整个计数循环评估常量表达式 1(或至少它的可空性)。我还没有检查这是否已在 PostgreSQL 14.

中修复

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

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