Как уже указывалось в комментариях, ваша таблица настолько мала, что на самом деле не соответствует вашему решению. По этой причине следует использовать select count(id)
, поскольку оно выражает намерение и не требует дальнейшей обработки.
Теперь select count(id)
поставляется с альтернативой select count(*)
. Эти два не являются синонимами. select count(*)
будет подсчитывать количество строк и использовать кэшированное значение, если это возможно, когда select count(id)
считает количество ненулевых значений существующего идентификатора столбца. Если для столбцов идентификаторов задано ненулевое значение, можно использовать количество кэшированных строк.
Выбор между count(*)
и count(id)
еще раз зависит от вашего намерения. В общем случае count(*)
лучше описывает намерение.
Существует возможность count(1)
, которая на самом деле является синонимом count(*)
при использовании mysql, но интерпретация может отличаться, если в конечном итоге использовать другую СУБД.
Производительность каждого типа счета также зависит от того, используете ли вы MyISAM или InnoDB. Количество строк кэшируется в первом, но не во втором, если я правильно понял.
В конце концов, вы должны полагаться на планы запросов и выполнение тестов и измерение их производительности, а не на эти общие проблемы.