Поскольку 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(*)
.