Кажется, я помню, что (на Oracle) есть разница между произнесением select count(*) from any_table
и select count(any_non_null_column) from any_table
.
Каковы различия между этими двумя утверждениями, если таковые имеются?
Это означает, что вы 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(*)
,COUNT(<constant>)
иCOUNT(<column name>)
что все три могут иметь префиксALL
или илиDISTINCT
(по умолчанию,ALL
если не указан). Мне просто интересно, какое выражение можно использовать там, где ты говоришь_or_expression
?COUNT(1)
как бесполезный пример, это так же, какCOUNT(*)
.COUNT(CASE WHEN a>b THEN 1 END)
в качестве примера, который считает строки, где а> б.В любой недавней (то есть 8.x + ) версии Oracle они делают то же самое . Другими словами, единственная разница семантическая:
легко читаемым и очевидным, что вы пытаетесь сделать, и
труднее читать, потому что
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 (*), без учета базы данных, просто выполните следующее и оцените время выполнения для себя:
Это позволяет функции COUNT работать на игровом поле одного уровня независимо от механизма хранения или RDBMS.
источник