Я бачив у документації різницю між count(*)і count(pk). Я використовував count(pk)(де pkце SERIAL PRIMARY KEY), не знаючи про існування count(*).
Моє запитання стосується внутрішніх оптимізацій Postgres. Чи достатньо розумно зрозуміти, що а SERIAL PRIMARY KEYбуде існувати в кожному рядку, і ніколи не буде помилковим, і лише рахувати рядки, або це буде робити зайві предикативні чеки для кожного ряду? Я погоджуюся, що це, мабуть, занадто багато безглуздої оптимізації, але мені просто цікаво.
Я поглянув на результат EXPLAINі EXPLAIN VERBOSEдля count(*), count(id)і count(id > 50)щоб побачити, чи EXPLAINзгадується перевірка предикатів у його результатах. Це не так.