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