Я чувствую, что стоит отметить, хотя в комментариях было затронуто, что в этой ситуации:
SELECT 1 FROM my_table WHERE *indexed_condition* LIMIT 1
Превосходит:
SELECT * FROM my_table WHERE *indexed_condition* LIMIT 1
Это связано с тем, что первый запрос может быть удовлетворен индексом, тогда как второй требует поиска строки (если, возможно, все столбцы таблицы не включены в используемый индекс).
Добавление LIMIT
пункта позволяет двигателю остановиться после нахождения любого ряда.
Первый запрос должен быть сопоставим с:
SELECT EXISTS(SELECT * FROM my_table WHERE *indexed_condition*)
Который посылает те же сигналы в движок (1 / * здесь не имеет значения), но я все равно написал бы 1, чтобы усилить привычку при использовании EXISTS
:
SELECT EXISTS(SELECT 1 FROM my_table WHERE *indexed_condition*)
Возможно, имеет смысл добавить EXISTS
перенос, если вам требуется явный возврат, если ни одна строка не совпадает.
...EXISTS( SELECT 1/0 FROM someothertable)
. Для SQL Server и Oracle - нет разницы, использовать *, 1 или NULL, потому что EXISTS проверяет только логическое значение на основе 1+ соответствия критерия WHERE.