Sobes.tech
Назад к вопросам
Middle
14

Что быстрее работает: count(*) или count(имя_колонки)?

Компании, где спрашивали
ЛеруаМерлен

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

count(*) обычно быстрее или как минимум не медленнее, чем count(имя_колонки), потому что не нужно проверять значение конкретного столбца на NULL. count(имя_колонки) считает только ненулевые значения, поэтому требует дополнительной проверки. На практике разница часто небольшая и зависит от СУБД и плана выполнения.

Определение:

count(*) считает количество строк в результате запроса, независимо от значений в столбцах. count(колонка) считает только строки, где в указанной колонке значение не NULL. Из-за этой семантики count(*) обычно проще для оптимизатора и может выполняться эффективнее.

Пример использования:

SELECT COUNT(*) AS total_rows
FROM orders;

SELECT COUNT(customer_id) AS rows_with_customer
FROM orders;

Если в таблице orders 1000 строк, но в customer_id 50 значений NULL, то:

  • COUNT(*) вернёт 1000
  • COUNT(customer_id) вернёт 950

Пояснение кода:

В первом запросе агрегатная функция считает все строки таблицы orders. Значения столбцов не анализируются, поэтому учитывается каждая строка.
Во втором запросе функция сначала проверяет customer_id в каждой строке. Если значение NULL, строка не попадает в счётчик.

Ключевые моменты:

  • COUNT(*) считает все строки.
  • COUNT(колонка) считает только строки, где колонка не NULL.
  • Обычно COUNT(*) предпочтительнее, если нужно именно количество строк.
  • Разница в производительности часто невелика, но COUNT(*) семантически и технически проще.
  • Если нужен подсчёт непустых значений конкретного поля, тогда используется COUNT(колонка).