Я вважаю, що варто зазначити, хоча в коментарях це стосувалося:
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, оскільки ІСНУЄТЬСЯ лише тести на булеве значення на основі 1+ відповідності критеріям WHERE.