Разница между count(1) и count(*) в запросах SQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

SQL-запрос SELECT COUNT(1) FROM table_name; используется для подсчёта строк в таблице table_name. Этот запрос часто сравнивают с COUNT(*), и в некоторых СУБД его считают более продуктивным, так как число один служит простым заполнителем для быстрого подсчёта строк.

SQL
Скопировать код
SELECT COUNT(1) FROM table_name;  //-- "Каждая строка для меня — как звезда!" 😉
Кинга Идем в IT: пошаговый план для смены профессии

Эквивалентность COUNT(1) и COUNT(*)

На самом деле, COUNT(1) в SQL-запросе считает все строки в таблице таким же образом, как и COUNT(*). Однако стоит упомянуть, что:

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

СУБД обрабатывают COUNT(1) и COUNT(*) одинаково, поэтому между ними нет существенного отличия.

Отсутствие значений NULL

Выражения COUNT(1) и COUNT(*) неразрывны для значений NULL.

  • Выражение '1' в COUNT(1) не может быть NULL и, следовательно, гарантирует подсчёт каждой строки без учёта её содержимого.
  • COUNT(*) также считает все строки без какого-либо исключения.

В этой битве против NULL наши герои проявляют полную устойчивость!

Модификаторы: ALL и DISTINCT на поле боя

В SQL COUNT() может принимать две роли: ALL и DISTINCT:

  • ALL: По умолчанию, COUNT() подсчитывает всех игроков, включая дубликаты.
  • DISTINCT: При этом условии COUNT() подсчитывает только уникальные строки.

Визуализация

Давайте рассмотрим SQL-команду SELECT COUNT(1) FROM table_name на примере отважного искателя сокровищ, которые считает сундуки с золотом:

Представьте таинственный остров 🏝️ с множеством сундуков, закопанных в песке (ваша таблица базы данных).

Markdown
Скопировать код
🏝️ Остров (Таблица Базы Данных): [💰, 💰, 💰, ..., 💰]

Искатель сокровищ (функция COUNT) хочет узнать, сколько сундуков спрятано на острове:

SQL
Скопировать код
SELECT COUNT(1) FROM остров_сокровищ;  //-- "Я пришел, я увидел, я подсчитал!" 💰
Markdown
Скопировать код
Расчёты искателя сокровищ:
- Считает каждый сундук как "1" (🔢)
- Не интересуется содержимым (🔒)
- Сообщает: "Шеф, на острове X сундуков со скарбами!"

Так же, как искатель сокровищ, COUNT(1) концентрируется на количестве, а не на содержимом.

Функция COUNT и производительность

Вопрос проективного результата — ключевой для SQL-команд:

  • Без разницы: Неважно, используете ли вы COUNT(1) или COUNT(*), современные СУБД обеспечивают оптимальную производительность обоих вариантов.
  • Рациональное выполнение: СУБД умно интерпретируют COUNT(1) и COUNT(*), и подсчёт строк проходит без анализа данных.

Лучше сосредоточиться на улучшении структуры данных, индексации и правильном использовании условий WHERE для повышения производительности.

Как максимально эффективно использовать COUNT

Вот стратегические советы для эффективного использования COUNT() в SQL:

  • Выражения по умолчанию: COUNT(*) идеально подходит для общих подсчетов; COUNT(1) полезен для специальных случаев.
  • COUNT с WHERE: Применяйте COUNT() совместно с WHERE для подсчета строк, соответствующих определенным критериям. Это будет вашим счётчиком по критериям.
  • Влияние объединений: При использовании left join COUNT(column_name), где column_name — столбец из присоединенной таблицы, можно получить другой результат, нежели при использовании COUNT(*).

Полезные материалы

  1. В чем разница между select count(*) и select count(любойненулевойстолбец)? – Database Administrators Stack Exchange
  2. В SQL, в чем разница между count(column) и count(*)? – Stack Overflow
  3. COUNT — Официальная документация Oracle по COUNT.
  4. Count(*) против Count(1) – SQL Server – Stack Overflow
  5. Как и когда использовать функцию COUNT в SQL