Что означает "select count(1) from table name" в любых таблицах базы данных?



когда мы выполняем select count(*) from table_name возвращает количество строк.



что значит count(1) сделать? Что значит 1 означает здесь? Это то же самое, что count(*) (как это дает тот же результат на исполнение)?

1459   9  

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) обеспечит те же результаты, что и will count(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>

однако имеет другое значение, так как он учитывает только строки с ненулевым значением для данного столбца.

в oracle я считаю, что они имеют точно такое же значение

вы можете проверить так:

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

    Ничего не найдено.