Vi na documentação a diferença entre count(*)
e count(pk)
. Eu estava usando count(pk)
(onde pk
está a SERIAL PRIMARY KEY
) não saber sobre a existência de count(*)
.
Minha pergunta é sobre as otimizações internas do Postgres. É inteligente o suficiente perceber que SERIAL PRIMARY KEY
a existirá em todas as linhas e nunca será falso e apenas contará linhas ou fará verificações de predicado redundantes para cada linha? Concordo que isso provavelmente é uma otimização sem sentido, mas estou curioso.
Dei uma olhada na saída de EXPLAIN
e EXPLAIN VERBOSE
para count(*)
, count(id)
e count(id > 50)
para ver se EXPLAIN
mencionou a verificação dos predicados em sua saída. Não faz.