Ho visto nella documentazione la differenza tra count(*)
e count(pk)
. Stavo usando count(pk)
(dov'è pk
a SERIAL PRIMARY KEY
) non sapendo dell'esistenza di count(*)
.
La mia domanda riguarda le ottimizzazioni interne di Postgres. È abbastanza intelligente capire che SERIAL PRIMARY KEY
a esisterà in ogni riga e non sarà mai falso e conterà solo le righe o eseguirà controlli predicati ridondanti per ogni riga? Concordo sul fatto che probabilmente si tratta di un'ottimizzazione troppo inutile, ma sono solo curioso.
Ho dato un'occhiata all'output di EXPLAIN
e EXPLAIN VERBOSE
per count(*)
, count(id)
e count(id > 50)
per vedere se EXPLAIN
menzionato controllando i predicati nel suo output. Non