9 ответов:
параметр функции COUNT-это выражение, которое должно быть вычислено для каждой строки. Функция count возвращает количество строк, для которых выражение принимает ненулевое значение. (*- это специальное выражение, которое не вычисляется, оно просто возвращает количество строк.)
есть два дополнительных модификатора для выражения: ALL и DISTINCT. Они определяют, отбрасываются ли дубликаты. Поскольку все по умолчанию, ваш пример совпадает с count(ALL 1), Что означает, что дубликаты сохраняются.
поскольку выражение " 1 " вычисляется как ненулевое для каждой строки, и поскольку вы не удаляете дубликаты, COUNT(1) всегда должен возвращать то же число, что и COUNT(*).
здесь ссылка что поможет ответить на ваши вопросы. Короче говоря:
count (*) - это правильный способ записи оно и отсчет(1) оптимизированы для того чтобы быть граф (*) внутренне -- с
a) подсчитайте строки, где 1 не является нулем является менее эффективным, чем
б) считать строки
разница между count (*) и count (1) в oracle?
count (*) означает, что он будет считать все записи, т. е. каждую ячейку Но
count (1) означает, что он добавит один псевдо-столбец со значением 1 и возвращает количество всех записей
это похоже на разницу между
SELECT * FROM table_name and SELECT 1 FROM table_name.если у вас
SELECT 1 FROM table_nameэто даст вам номер 1 для каждой строки в таблице. Так что да
count(*)иcount(1)обеспечит те же результаты, что и willcount(8)илиcount(column_name)
нет никакой разницы.
COUNT(1)в основном просто подсчитывает постоянное значение 1 столбец для каждой строки. Как и другие пользователи здесь сказали, это то же самое, чтоCOUNT(0)илиCOUNT(42). Любой не -NULLзначение будет достаточно.http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
оптимизатор Oracle, по-видимому, использовал ошибки в нем, что привело к тому, что счетчик был затронут каким столбцом вы выбрали и было ли это в индексе, поэтому появилось соглашение COUNT(1).
SELECT COUNT(1) from <table name>должен делать то же самое, что и
SELECT COUNT(*) from <table name>возможно, были или все еще есть некоторые причины, по которым он будет работать лучше, чем
SELECT COUNT(*)на некоторых базах данных, но я бы счел, что ошибка в БД.SELECT COUNT(col_name) from <table name>однако имеет другое значение, так как он учитывает только строки с ненулевым значением для данного столбца.
вы можете проверить так:
create table test1( id number, name varchar2(20) ); insert into test1 values (1,'abc'); insert into test1 values (1,'abc'); select * from test1; select count(*) from test1; select count(1) from test1; select count(ALL 1) from test1; select count(DISTINCT 1) from test1;
в зависимости от того, кого вы спрашиваете, некоторые люди сообщают, что выполнение
select count(1) from random_table;работает быстрее, чемselect count(*) from random_table. Другие утверждают, что они точно такие же.этой ссылке утверждает, что разница в скорости между 2 происходит из-за полного сканирования таблицы против быстрого полного сканирования.
Comments