Почему Избранный 1 быстрее, чем Избранное количество (*)?

Да. Вы выходите из новых строк с \:

VARIABLE="\
THIS IS A VERY LONG\
TEXT STRING IN A MAKE VARIABLE"

обновление

А-ч, Вы хотите новые строки? Тогда не я не думаю, что существует любой путь в ванили, Делают. Однако можно всегда использовать здесь-документ в части

команды [Это не работает, видит комментарий от MadScientist]

foo:
    echo <<EOF
    Here is a multiple line text
    with embedded newlines.
    EOF
10
задан 10 September 2009 в 16:07
поделиться

7 ответов

Поскольку Oracle не поддерживает IF EXISTS в PL / SQL, предложение CodeByMidnight об использовании EXISTS обычно выполняется с помощью чего-то вроде

SELECT 1 
  INTO l_local_variable 
  FROM dual 
 WHERE EXISTS( 
    SELECT 1 
      FROM some_table 
     WHERE some_column = some_condition ); 

Oracle знает, что он может остановить обработку предложения WHERE EXISTS, поскольку как только будет найдена одна строка, поэтому потенциально не нужно подсчитывать большое количество строк, соответствующих критериям. Конечно, это не вызывает беспокойства, если вы проверяете, существует ли строка с определенным ключом, чем если вы проверяете условие, включающее неиндексированные столбцы, или проверяете условие, которое может привести к возврату большого количества строк.

(Примечание: я бы хотел опубликовать это как комментарий к сообщению CodeByMidnight, но комментарии не могут содержать форматированный код).

ОБНОВЛЕНИЕ: Учитывая пояснение, сделанное исходным плакатом в своем комментарии, краткое, Окончательный ответ таков: SELECT 1 или SELECT COUNT (1) не быстрее, чем SELECT COUNT (*) . Вопреки любым рекомендациям по кодированию, на которые вы смотрите, COUNT (*) является предпочтительным способом подсчета всех строк. Существовал старый миф о том, что COUNT (1) быстрее. Как минимум, этого не было ни в одной из версий Oracle, выпущенных за последнее десятилетие, и маловероятно, что это когда-либо было правдой. Однако это было широко распространенным мнением. Сегодня код, который выполняет COUNT (1) , а не COUNT (*) , обычно заставляет меня подозревать, что автор склонен верить различным мифам Oracle, поэтому я бы предложил использовать СЧЕТЧИК (*) .

COUNT (*) - предпочтительный способ подсчета всех строк. Существовал старый миф, что COUNT (1) быстрее. Как минимум, этого не было ни в одной из версий Oracle, выпущенных за последнее десятилетие, и маловероятно, что это когда-либо было правдой. Однако это было широко распространенным мнением. Сегодня код, который выполняет COUNT (1) , а не COUNT (*) , обычно заставляет меня подозревать, что автор склонен верить различным мифам об Oracle, поэтому я предлагаю использовать СЧЕТЧИК (*) .

COUNT (*) - предпочтительный способ подсчета всех строк. Существовал старый миф, что COUNT (1) быстрее. Как минимум, этого не было ни в одной из версий Oracle, выпущенных за последнее десятилетие, и маловероятно, что это когда-либо было правдой. Однако это было широко распространенным мнением. Сегодня код, который выполняет COUNT (1) , а не COUNT (*) , обычно заставляет меня подозревать, что автор склонен верить различным мифам об Oracle, поэтому я предлагаю использовать СЧЕТЧИК (*) .

Однако. Сегодня код, который выполняет COUNT (1) , а не COUNT (*) , обычно заставляет меня подозревать, что автор склонен верить различным мифам об Oracle, поэтому я предлагаю использовать СЧЕТЧИК (*) .

Однако. Сегодня код, который выполняет COUNT (1) , а не COUNT (*) , обычно заставляет меня подозревать, что автор склонен верить различным мифам Oracle, поэтому я бы предложил использовать СЧЕТЧИК (*) .

14
ответ дан 3 December 2019 в 14:43
поделиться

Еще лучше использовать EXISTS, если СУБД поддерживает его, или эквивалент, так как это остановит обработку строк, как только будет найдено совпадение.

15
ответ дан 3 December 2019 в 14:43
поделиться

Я был бы удивлен, если бы select count (*) не был оптимизирован должным образом, нет необходимости загружать все столбцы, так как столбцы не связаны обработка.

2
ответ дан 3 December 2019 в 14:43
поделиться

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

В MySQL "SELECT COUNT (name_of_the_primary_key)" должен быть таким же быстрым, как ваш SELECT 1. Это индекс, который имеет значение. Функция count () по индексу должна выполняться довольно быстро;)

0
ответ дан 3 December 2019 в 14:43
поделиться

http://www.dbasupport.com/forums/archive/index.php/t-28741.html

По крайней мере, для Oracle.

1
ответ дан 3 December 2019 в 14:43
поделиться

Я не думаю, что это верно для Oracle. http://justoracle.blogspot.com/2006/12/count-vs-count1.html

Но в некоторых базах данных причина в том, что '*' должен посещать метаданные таблиц. Это имеет тенденцию добавлять ненужные накладные расходы. Где 1 - это просто литерал.

0
ответ дан 3 December 2019 в 14:43
поделиться

При прочих равных, "select 1 from my_table" вернет первый результат быстрее, чем "select count (*) from my_table ", но если вы извлечете все результаты из запроса, count (*) будет быстрее, потому что он включает гораздо меньше данных (1 целое число, а не 1 целое число для каждого строку в таблице).

0
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: