Что означает "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>
однако имеет другое значение, поскольку он подсчитывает только строки с ненулевым значением для данного столбца.
вы можете проверить так:
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 из-за полного сканирования таблицы против быстрого полного сканирования.