Abfrageoptimierung: Die dramatischen Auswirkungen des Ersetzens von Unterabfragen durch joins
Eine kürzlich durchgeführte Bewerbung verbesserte die Leistung dramatisch, indem eine Unterabfrage durch einen inneren Join ersetzt wurde. Der ursprüngliche Code verwendete eine Unterabfrage in der wobei
Klausel:
WHERE id IN (SELECT id FROM ...)
Die Änderung führte zu einer atemberaubenden 100 -fachen Geschwindigkeit, die die Ausführungszeit von 50 Sekunden auf 0,3 Sekunden ließ. Dies wirft die Frage auf: Warum so ein massiver Unterschied?
Der Schlüssel liegt im Verständnis des Unterabbildungsverhaltens. Eine korrelierte Unterabfrage - wo die Klausel der Unterabfrage von den Werten der äußeren Abfrage abhängt - fährt für jede Zeile in der äußeren Abfrage wiederholt aus. Diese wiederholte Ausführung ist äußerst ineffizient. Im Gegensatz dazu wird eine nicht korrelierte Unterabfrage nur einmal ausgeführt.
.
Das Ersetzen der Unterabfrage durch einen inneren Join erlaubte der Datenbank, Index -Lookups effizient zu nutzen. Die Join -Bedingung (z. B. submission_id = st_tag_id ) für eine einzelne indizierte Suche pro Qualifikationszeile zulässig. Diese drastisch reduzierte Datenbank zugreifen und erklärt den Leistungssprung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3