Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Параметр функции COUNT - это выражение, которое должно быть оценено для каждой строки. Функция COUNT возвращает количество строк, для которых выражение оценивается как ненулевое значение. (* - специальное выражение, которое не оценивается, оно просто возвращает количество строк.)

Есть два дополнительных модификатора для выражения: ALL и DISTINCT. Они определяют, выбраны ли дубликаты. Поскольку ALL является значением по умолчанию, ваш пример совпадает с count (ALL 1), что означает, что дубликаты сохраняются.

Поскольку выражение "1" оценивает значение non-null для каждой строки, и поскольку вы не удаляете дубликаты, COUNT (1) всегда должен возвращать тот же номер, что и COUNT (*).

Ответ 2

Вот ссылка, которая поможет ответить на ваши вопросы. Короче говоря:

count (*) - правильный способ записи он и счет (1) ОПТИМАЛЬНО БЫТЬ count (*) внутренне - поскольку

a) подсчитывать строки, где 1 не является нулевым менее эффективен, чем б) подсчитать строки

Ответ 3

Разница между count (*) и count (1) в оракуле?

count (*) означает, что он будет считать все записи в каждой ячейке НО

count (1) означает, что он добавит один псевдо-столбец со значением 1 и возвращает количество всех записей

Ответ 4

Это похоже на разницу между

SELECT * FROM table_name and SELECT 1 FROM table_name.  

Если вы делаете

SELECT 1 FROM table_name

он даст вам номер 1 для каждой строки в таблице. Итак, да count(*) и count(1) будут давать те же результаты, что и count(8) или count(column_name)

Ответ 5

Нет никакой разницы.

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) возникло.

Ответ 6

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

Ответ 7

SELECT COUNT(1) from <table name>

должен делать то же самое, что и

SELECT COUNT(*)  from <table name>

Возможно, были или остаются некоторые причины, по которым он будет работать лучше, чем SELECT COUNT(*) в некоторой базе данных, но я бы подумал, что ошибка в БД.

SELECT COUNT(col_name) from <table name>

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

Ответ 8

Вы можете протестировать следующее:

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;

Ответ 9

В зависимости от того, кого вы спрашиваете, некоторые люди сообщают, что выполнение select count(1) from random_table; выполняется быстрее, чем select count(*) from random_table. Другие утверждают, что они точно такие же.

Эта ссылка утверждает, что разница в скорости между 2 связана с FULL TABLE SCAN и FAST FULL SCAN.