COUNT(*)
считает все строкиCOUNT(column)
считает только не-NULLCOUNT(1)
то же самое, что и COUNT(*)
потому что 1 является не нулевое выражениеВаше использование COUNT(*)
или COUNT(column)
должно основываться на желаемом выводе только.
Это относится к MySQL. Насчет остальных я не уверен.
Разница в следующем:
COUNT (*)
подсчитывает количество записей. COUNT (имя_столбца)
подсчитает количество записей, в которых имя_столбца не равно нулю. Следовательно, вы должны использовать COUNT (*)
. Если вы используете MyISAM и нет предложения WHERE
, то оптимизатору даже не нужно смотреть на таблицу, поскольку количество строк уже кэшировано.
Когда это идентификатор (и гарантированно не NULL
), то это, вероятно, не имеет значения.
Однако есть разница между COUNT (*)
и COUNT (столбец)
в целом, в этом COUNT (столбец)
вернет количество значений, отличных от NULL
в столбце. Существует также вариант COUNT (DISTINCT column)
, который возвращает количество уникальных значений, отличных от NULL
.
Да, возможна разница в производительности. В зависимости от вашего запроса и индексации рассматриваемой таблицы может быть быстрее получить счет из индекса, а не переходить к таблице для данных. Таким образом, вам, вероятно, следует указать имя поля вместо использования *.
В целом то же самое, но в деталях AFAIK "count (*)" лучше b / c "count (columnname)" заставляет БД выполнять немного больше кода для поиска имени этого столбца (но не обязательно).