Wie kann man feststellen, was effektiver ist: DISTINCT oder WHERE EXISTS?

8

Zum Beispiel habe ich 3 Tabellen: user , group und permission , und zwei many2many Beziehungen zwischen ihnen: user_groups und group_permissions .

Ich muss alle Berechtigungen eines bestimmten Benutzers ohne Wiederholungen auswählen. Jedes Mal, wenn ich auf ein ähnliches Problem stoße, kann ich nicht feststellen, welche Version einer Abfrage besser ist:

%Vor%

Ich habe genügend Erfahrung, um Schlussfolgerungen zu machen, die auf Erklärungen basieren. Die erste Abfrage hat eine Unterabfrage, aber meine Erfahrungen haben gezeigt, dass die erste Abfrage schneller ist. Vielleicht wegen der großen Anzahl von gefilterten Berechtigungen im Ergebnis.

Was würden Sie in dieser Situation tun? Warum? Danke!

    
defuz 30.08.2012, 16:58
quelle

1 Antwort

11

Verwenden Sie EXISTS statt DISTINCT

Sie können die Anzeige von doppelten Zeilen mit DISTINCT unterdrücken; Sie verwenden EXISTS, um das Vorhandensein von Zeilen zu überprüfen, die von einer Unterabfrage zurückgegeben werden. Wann immer möglich sollten Sie EXISTS anstelle von DISTINCT verwenden, da DISTINCT die abgerufenen Zeilen sortiert, bevor die doppelten Zeilen unterdrückt werden.

In Ihrem Fall sollten viele duplizierte Daten vorhanden sein, so dass die vorhandenen Daten schneller sein sollten.

Ссылка

    
DadViegas 30.08.2012, 17:07
quelle