Ich halte es für erwähnenswert, obwohl in den Kommentaren darauf hingewiesen wurde, dass in dieser Situation:
SELECT 1 FROM my_table WHERE *indexed_condition* LIMIT 1
Ist überlegen:
SELECT * FROM my_table WHERE *indexed_condition* LIMIT 1
Dies liegt daran, dass die erste Abfrage vom Index erfüllt werden kann, während die zweite eine Zeilensuche erfordert (es sei denn, möglicherweise befinden sich alle Spalten der Tabelle im verwendeten Index).
Durch Hinzufügen der LIMIT
Klausel kann die Engine gestoppt werden, nachdem eine Zeile gefunden wurde.
Die erste Abfrage sollte vergleichbar sein mit:
SELECT EXISTS(SELECT * FROM my_table WHERE *indexed_condition*)
Was die gleichen Signale an den Motor sendet (1 / * macht hier keinen Unterschied), aber ich würde trotzdem die 1 schreiben, um die Gewohnheit bei der Verwendung zu verstärken EXISTS
:
SELECT EXISTS(SELECT 1 FROM my_table WHERE *indexed_condition*)
Es kann sinnvoll sein, die EXISTS
Umhüllung hinzuzufügen , wenn Sie eine explizite Rückgabe benötigen, wenn keine Zeilen übereinstimmen.
...EXISTS( SELECT 1/0 FROM someothertable)
. Für SQL Server und Oracle macht es keinen Unterschied, *, 1 oder NULL zu verwenden, da EXISTS nur einen Booleschen Wert testet, der auf 1+ der übereinstimmenden WHERE-Kriterien basiert.