513 Stimmen

Unterschied zwischen EXISTS und IN in SQL?

Was ist der Unterschied zwischen dem EXISTS y IN Klausel in SQL?

Wann sollten wir die EXISTS und wann sollten wir die IN ?

0voto

Adam Punkte 20147

Wenn Sie Folgendes verwenden können where in 代わりに where exists entonces where in ist wahrscheinlich schneller.

使用する where in o where exists durchläuft alle Ergebnisse des übergeordneten Ergebnisses. Der Unterschied hier ist, dass die where exists wird eine Menge abhängiger Unterabfragen verursachen. Wenn Sie abhängige Unterabfragen verhindern können, dann where in die bessere Wahl sein wird.

Beispiel

Angenommen, wir haben 10.000 Unternehmen mit jeweils 10 Benutzern (unsere Benutzertabelle hat also 100.000 Einträge). Nehmen wir nun an, Sie möchten einen Benutzer anhand seines Namens oder seines Firmennamens finden.

Die folgende Abfrage mit were exists hat eine Ausführungszeit von 141ms:

select * from `users` 
where `first_name` ='gates' 
or exists 
(
  select * from `companies` 
  where `users`.`company_id` = `companies`.`id`
  and `name` = 'gates'
)

Dies geschieht, weil für jeden Benutzer eine abhängige Unterabfrage ausgeführt wird: enter image description here

Wenn wir jedoch die exist-Abfrage vermeiden und sie mit:

select * from `users` 
where `first_name` ='gates' 
or users.company_id in  
(
    select id from `companies` 
    where  `name` = 'gates'
)

Dann werden abhängige Unterabfragen vermieden, und die Abfrage würde in 0,012 ms ausgeführt

enter image description here

0voto

Axel Der Punkte 341

Ich habe festgestellt, dass die Verwendung des EXISTS-Schlüsselworts oft sehr langsam ist (das gilt auch für Microsoft Access). Ich verwende stattdessen den Verknüpfungsoperator auf diese Weise: sollte-ich-das-schlüsselwort-vorhanden-in-sql verwenden

0voto

FatalError Punkte 85

Ich glaube, darauf gibt es eine ganz einfache Antwort. Warum erkundigen Sie sich nicht bei den Leuten, die diese Funktion in ihren Systemen entwickelt haben?

Wenn Sie ein MS SQL-Entwickler sind, finden Sie hier die Antwort direkt von Microsoft.

IN :

Ermittelt, ob ein angegebener Wert mit einem beliebigen Wert in einer Unterabfrage oder einer Liste übereinstimmt.

EXISTS :

Gibt eine Unterabfrage an, die auf das Vorhandensein von Zeilen prüft.

0voto

djohn Punkte 1

Wenn eine Unterabfrage mehr als einen Wert zurückgibt, müssen Sie möglicherweise die äußere Abfrage ausführen, wenn die Werte in der in der Bedingung angegebenen Spalte mit einem Wert in der Ergebnismenge der Unterabfrage übereinstimmen. Um diese Aufgabe auszuführen, müssen Sie die in Stichwort.

Sie können eine Unterabfrage verwenden, um zu prüfen, ob eine Reihe von Datensätzen existiert. Hierfür müssen Sie die exists Klausel mit einer Unterabfrage. Die exists Schlüsselwort immer den Wert true oder false zurück.

-1voto

Deva Punkte 9

EXISTS ist in der Leistung schneller als IN. Wenn die meisten der Filterkriterien in der Unterabfrage sind, dann ist es besser, IN zu verwenden, und wenn die meisten der Filterkriterien in der Hauptabfrage sind, dann ist es besser, EXISTS zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X