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

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

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

9 ответов


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

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

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


здесь ссылка что поможет ответить на ваши вопросы. Короче:

count (*) - правильный способ записи IT и count(1) оптимизированы для count (*) внутренне -- since

a) подсчитайте строки, где 1 не равно null менее эффективен, чем
б) считать строки


разница между count (*) и count (1) в oracle?

count (*) означает, что он будет считать все записи i.e каждая ячейка Но!--1-->

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 из-за полного сканирования таблицы против быстрого полного сканирования.