Ответы:
Это означает, что вы COUNT(any_non_null_column)
получите то же самое, что и, COUNT(*)
конечно, потому что нет значений NULL, которые могли бы вызвать различия.
Как правило, COUNT(*)
должно быть лучше, потому что любой индекс может быть использован, потому что COUNT(column_or_expression)
не может быть проиндексирован или SARGable
От ANSI-92 (ищите " Scalar expressions 125
")
Случай:
a) Если указано COUNT (*), то результатом будет количество элементов T.
b) В противном случае, пусть TX будет таблицей из одного столбца, которая является результатом применения <выражения значения> к каждой строке T и исключения нулевых значений. Если одно или несколько нулевых значений удаляются, то возникает условие завершения: предупреждение - нулевое значение исключается в заданной функции.
Те же правила применяются по крайней мере к SQL Server и Sybase
Примечание. COUNT (1) - это то же самое, что и COUNT (*), потому что 1 является ненулевым выражением.
COUNT(*)
, COUNT(<constant>)
и COUNT(<column name>)
что все три могут иметь префикс ALL
или или DISTINCT
(по умолчанию, ALL
если не указан). Мне просто интересно, какое выражение можно использовать там, где ты говоришь _or_expression
?
COUNT(1)
как бесполезный пример, это так же, как COUNT(*)
. COUNT(CASE WHEN a>b THEN 1 END)
в качестве примера, который считает строки, где а> б.
В любой недавней (то есть 8.x + ) версии Oracle они делают то же самое . Другими словами, единственная разница семантическая:
select count(*) from any_table
легко читаемым и очевидным, что вы пытаетесь сделать, и
select count(any_non_null_column) from any_table
труднее читать, потому что
any_non_null_column
действительно ли применяется какnot null
Короче говоря, используйтеcount(*)
В последней версии действительно нет никакой разницы между count (*) и count ( любой столбец , не равный NULL ), с акцентом на NULL :-) Случайно охватил эту тему сообщением в блоге: является ли count (col) лучше, чем count (*)?
В книге Руководство по сертификационному экзамену Oracle8i для сертифицированных профессиональных DBA (ISBN 0072130601) на стр. 78 говорится, что COUNT (1) будет на самом деле работать быстрее, чем COUNT (*), потому что определенные механизмы задействуются для проверки словаря данных на предмет обнуляемости каждого столбца (или по крайней мере, первый столбец с ненулевым значением) при использовании COUNT (*) . COUNT (1) обходит эти механизмы.
MySQL читы для «SELECT COUNT (1) на tblname;» в таблицах MyISAM, читая заголовок таблицы для количества таблиц. InnoDB считает каждый раз.
Чтобы проверить, будет ли COUNT (1) работать быстрее, чем COUNT (*), без учета базы данных, просто выполните следующее и оцените время выполнения для себя:
SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;
Это позволяет функции COUNT работать на игровом поле одного уровня независимо от механизма хранения или RDBMS.
count(*)
он используется.