2016-01-13 14 views
5

Gibt es einen Leistungsvorteil beim Hinzufügen einer LIMIT zu einer EXISTS Abfrage, oder würde MySQL das Limit selbst anwenden?Irgendein Punkt bei der Verwendung von LIMIT in EXISTS Abfrage?

Beispiel:

IF EXISTS (
    SELECT 1 
     FROM my_table 
    LIMIT 1 -- can this improve performance? 
) 
THEN ... END IF; 
+0

yeah ... Dies verbessert die Leistung, weil Sie Datensätze begrenzen. –

+0

Haben Sie versucht, 'EXPLAIN' zu verwenden? –

+0

@TimBiegeleisen, ja, es scheint nicht betroffen. – shmosel

Antwort

10

Der Zweck EXISTS() ist die Abfrage auszuführen nur bis kann sie entscheiden, ob es irgendwelche Zeilen in dieser Tabelle Anpassung der WHERE Klausel sind. Das heißt, es tut logisch dasselbe wie LIMIT 1. EXISTS wird wahrscheinlich in einigen Kreisen semi-join genannt.

Fazit: Verwenden Sie nicht LIMIT 1 innerhalb EXISTS().

0

mit meiner Anfrage ein wenig Fiedeln, bemerkte ich, dass EXISTS noch 1 zurück, wenn LIMIT auf 0 gesetzt ist Ich nehme an, dies zeigt an, dass es ignoriert.

+0

Ich schlage vor, dass "LIMIT 0" ein anomaler Randfall ist. –

0

Dies hängt davon ab, wie viele Datensätze in Ihrer Tabelle (my_table) .If Datensätze sind nicht zu viel dann werden Sie keine Leistungsverbesserung sehen, aber wenn Ihre Tabelle zu viele Datensätze hat, dann sehen Sie die Leistungsverbesserung, aber dies wird auch hängt von vielen Faktoren ab, wie Sie Index in der Spalte haben, die in Auswahl verwendet werden (wenn Sie dies tun, dann werden Sie den Vorteil der Abdeckung Index auch erhalten).