Ist dies ein neues allgemeines Muster in Oracle Wo existiert (Wählen Sie NULL VON…)?

8

Vor Jahren war es üblich zu schreiben

where exists (Select * from some_table where some_condition)

Letztes Jahr habe ich festgestellt, dass viele T-SQL-Skripte auf die Nummer 1 anstelle des Sterns umgestellt haben

where exists (Select 1 from some_table where some_condition)

Nur auf SO habe ich dieses Oracle-Beispiel gesehen

WHERE EXISTS (SELECT NULL FROM ...

Ist dies ein allgemeines Muster bei Oracle? Und was sind die Leistungsargumente, um so etwas zu verwenden?

bernd_k
quelle
2
SO hat eine Diskussion darüber. stackoverflow.com/questions/424212/…
Leigh Riffel

Antworten:

6

Kurze Antwort: Ich würde nicht hoffen!

Sogar die SELECT 1Redewendung hat möglicherweise ihre Nützlichkeit überlebt, da die Datenbank-Engines so weit fortgeschritten sind, dass sie erkennen, dass Sie die Zeilen nicht wirklich wollen, sondern nur wissen möchten, ob die Zeilen existieren. Ich habe mir Ausführungspläne in SQL 2005 angesehen und im Allgemeinen gesehen, dass diese als Verknüpfungen neu geschrieben wurden, selbst wenn sie SELECT *verwendet werden.

Larry Coleman
quelle
5

In Oracle spielt die Leistung keine Rolle. Sie können dort sogar 1/0 setzen, und die Anweisung gibt keinen Fehler zum Teilen durch Null zurück, da der Ausdruck nicht ausgewertet wird.

Leigh Riffel
quelle
1
Muss dies geschlossen werden, um sich auf die SO-Frage zu verlassen? Ist dies einer von denen, die "die SO nach dba.SE migrieren"?
Jcolebrand