Welcher der beiden würde besser funktionieren (ich wurde kürzlich beschuldigt, mit meinem Code nicht vorsichtig zu sein, weil ich den späteren in Oracle verwendet habe):
%Vor%Oder sind sie beide gleich?
Beantworten Sie sowohl die SQL Server-Perspektive als auch die Oracle-Perspektive.
Ich habe gegoogelt (meistens von sql-serverseite) und festgestellt, dass es immer noch viele Diskussionen darüber gibt, obwohl meine derzeitige Meinung / Annahme der Optimierer in beiden RDMBS ist reif genug zu verstehen, dass alles, was erforderlich ist Die Unterabfrage ist ein boolescher Wert.
Ja, sie sind gleich. exists
überprüft, ob in der Unterabfrage mindestens eine Zeile vorhanden ist. Wenn dies der Fall ist, wird true
ausgewertet. Die Spalten in der Unterabfrage spielen keine Rolle.
Nach MSDN , exists
:
Gibt eine Unterabfrage für das Vorhandensein von Zeilen an.
Und Oracle :
Eine EXISTS-Bedingung testet das Vorhandensein von Zeilen in einer Unterabfrage.
Vielleicht ist die MySQL-Dokumentation noch erklärender:
Traditionell beginnt eine EXISTS-Unterabfrage mit SELECT *, aber sie könnte mit SELECT 5 oder SELECT spalte1 oder irgendetwas anderem beginnen. MySQL ignoriert die SELECT-Liste in einer solchen Unterabfrage, so dass es keinen Unterschied macht.
Ich weiß, das ist alt, aber möchte einige Punkte hinzufügen, die ich kürzlich beobachtet habe.
Auch wenn exisits nur auf existence überprüft werden, wenn wir "select *" all schreiben, werden Spalten erweitert, abgesehen von diesem leichten Overhead, gibt es keine Unterschiede.
Quelle:
Ссылка
Aktualisierung:
Artikel, auf den ich verwiesen habe, scheint nicht gültig zu sein. Selbst wenn wir schreiben, select 1
, wird SQLServer alle Spalten erweitern.
Siehe unten stehenden Link für detaillierte Analyse und Leistungsstatistiken, wenn verschiedene Ansätze verwendet werden.
Tags und Links sql sql-server oracle exists