З COUNT(1) існує помилкова думка, що він підраховує записи з першого стовпця. COUNT(1) насправді робить це він замінює всі записи, які ви отримуєте з результату запиту, на значення 1, а потім підраховує рядки тобто він навіть замінює NULL на 1, тобто він бере до уваги NULL під час підрахунку.
Count(*): він отримає дані всіх рядків без будь-якої обробки та додасть 1 до кількості рядків. Count(1): він отримає дані всіх рядків, кожен рядок має фіксоване значення 1, яке також додає 1 до кількості рядків.
Семантично ці дві функції агрегації роблять те саме. Один підраховує кількість одиниць (по одній на рядок), інший підраховує кількість рядків. Немає причин, чому один повинен бути швидшим за інший. Для постійного або непостійного виразу, який завжди не є NULL, обидва дають однаковий результат.
Виберіть 1 буде отримати всі рядки, що показують 1 значення в одному стовпці з назвою 1, це означає, що ви можете отримати всі рядки в казці, але лише зі стовпцем 1, і ви дізнаєтеся лише про те, що в таблиці стільки рядків.
Вираз 1 у COUNT(1) обчислює постійний вираз для кожного рядка в групі, і можна довести, що цей постійний вираз ніколи не матиме значення NULL , тож фактично ми запускаємо COUNT(*) , знову підраховуючи ВСІ рядки в групі.