W dokumentacji widziałem różnicę między count(*)i count(pk). Korzystałem count(pk)(gdzie pka SERIAL PRIMARY KEY) nie wiedząc o istnieniu count(*).
Moje pytanie dotyczy wewnętrznych optymalizacji Postgres. Czy jest wystarczająco mądry, aby stwierdzić, że a SERIAL PRIMARY KEYbędzie istniał w każdym rzędzie i nigdy nie będzie fałszywy i po prostu policzy wiersze, czy też będzie przeprowadzać zbędne sprawdzanie predykatów dla każdego wiersza? Zgadzam się, że jest to chyba zbytnia bezcelowa optymalizacja, ale jestem po prostu ciekawy.
Wziąłem spojrzeć na wyjściu EXPLAINi EXPLAIN VERBOSEna count(*), count(id)i count(id > 50)zobaczyć, czy EXPLAINwspomniane sprawdzania predykatów w swoim wyjściu. Tak nie jest.