I've seen answers to this question for other databases (MySQL, SQL Server, etc.) but not for PostgreSQL. So, is COUNT(1)
or COUNT(*)
faster/better for selecting the row count of a table?
CodePudding user response:
Benchmarking the difference
The last time I've 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 has been that the constant expression 1
(or at least its nullability) is being evaluated for the entire count loop. I haven't checked whether this has been fixed in PostgreSQL 14.
Don't worry about this in real world queries
However, you shouldn't worry about such a performance difference. The difference of 10% was measurable in a benchmark, but I doubt you can consistently measure such a difference in an ordinary query. Also, ideally, all SQL vendors optimise the two things in the same way, given that 1
is a constant expression, and thus can be eliminated. As mentioned in the above article, I couldn't find any difference in any other RDBMS that I've tested (MySQL, Oracle, SQL Server), and I wouldn't expect there to be any difference.