Langsame „IN“-Abfragen mit Unterabfragen in MySQL
MySQL-Abfragen, die den „IN“-Operator verwenden, können bei Verwendung der Unterabfrage zu erheblichen Leistungseinbußen führen Das Abrufen der Werte für die „IN“-Klausel ist komplex. In solchen Fällen führt das Ersetzen der Unterabfrageergebnisse durch explizite Werte zu erheblichen Verbesserungen der Ausführungszeit.
Um die Ursache dieses Verhaltens zu verstehen, ist es wichtig zu beachten, dass MySQL jedes Mal Unterabfragen ausführt, wenn die „IN“-Abfrage ausgewertet wird . Im bereitgestellten Beispiel gibt es 7 Millionen Zeilen in der Tabelle em_link_data, von denen jede separat verarbeitet wird, was zu zahlreichen Unterabfrageauswertungen führt.
Das Ersetzen der Unterabfrage durch explizite Werte hingegen macht dies überflüssig wiederholte Unterabfrageausführungen, was zu einer erheblichen Leistungssteigerung führt. Ein ähnlicher Leistungsvorteil kann durch die Verwendung eines JOIN anstelle einer „IN“-Unterabfrage erzielt werden, wodurch der Ausführungsprozess weiter optimiert wird.
Leider kann der Benutzer die Abfrage aufgrund von Softwareeinschränkungen nicht ändern. In solchen Fällen lohnt es sich, alternative Methoden zur Verbesserung der Leistung zu untersuchen, z. B. die Optimierung der beteiligten Tabellen durch die Erstellung geeigneter Indizes oder die Suche nach Möglichkeiten, die Anzahl der von der Abfrage verarbeiteten Zeilen zu reduzieren.
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