Мне всегда было интересно, в чем разница между этими тремя способами использования COUNT
SQL (я также не знаю, есть ли разница в зависимости от используемого драйвера базы данных).
Например, в MySQL, если у меня есть таблица со 100 записями, и я делаю это:
SELECT COUNT(*), COUNT(1), COUNT(columna) FROM tabla;
Он выдает мне три столбца с правильным счетом.
В чем разница между этими тремя способами использования COUNT
?
Есть ли одна из них, основанная на объективных тестах, которая более рекомендуется, или не имеет значения использование любой из форм?
Что касается результатов:
Нет никакой разницы между
count(*)
иcount(1)
, для каждой возвращаемой строки будет равно 1.Но
count(columna)
это другое: он не будет считать строки, в которых находится этот столбецNULL
.Кроме того, в последнем случае вы можете считать только отдельные:
С точки зрения производительности трудно сказать, лучше ли одно, чем другое, поскольку это зависит от того, используется ли он отдельно или с большим количеством полей, а также от менеджера базы данных:
count(*)
в Oracle и PostgreSQL (возможно, и в других, но я не могу сказать) это определяется как «тривиальная» операция, значения, как известно, не имеют значения, поэтому, используя индекс таблицы, вы можете получить значение без фактического перебора строки. С count(1) поведение похоже (результатом для каждой строки является константа, которая не равна нулю), поэтому нет необходимости получать данные, чтобы знать, есть ли значения NULL для отбрасывания.COUNT(*)
подсчитывает записиSELECT
запроса, сохраняя столбцы запроса в памяти, то есть, если запрос имеет 20 столбцов и 300 записей, он сохранит 6000 пробелов в памяти со своими данными. что приведет к задержке обработки запроса.COUNT(columna)
количество записей, в которых «столбец» не равен NULLCOUNT(n)
(где n — число) принимает значение n (в данном случае) как таблицу с одним столбцом, где его значение для каждой записи равно n для каждой записи, независимо от того, содержит ли она 20 столбцов. для примера первого случая будет всего 300 * 1 = 300 значений, что позволит быстрее обрабатывать запрос.Посмотреть ссылку Мир жаб
COUNT(*)
подсчитайте записи SELECT.COUNT(columna)
количество записей, в которых «столбец» не равен NULL (столбец НЕ NULL)COUNT(1)
(с номером) Я никогда не использовал его. Справка Microsoft это не считает ( ссылка )Я надеюсь, что это служит вам. Atte., Алекс Эдуардо Ривера Эррера.