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