Analyse der schlechten Leistung, die durch einen großen LIMIT-Offset in der MySQL-Abfrage verursacht wird

Analyse der schlechten Leistung, die durch einen großen LIMIT-Offset in der MySQL-Abfrage verursacht wird

Vorwort

Wir alle wissen, dass MySQL-Abfragen den Befehl select verwenden und mit den Parametern limit und offset Datensätze in einem bestimmten Bereich lesen können. Der Grund, warum der Offset zu groß ist, wirkt sich jedoch auf die Abfrageleistung und die Optimierungsmethode aus

Wir brauchen zwangsläufig Paging in unseren Geschäftssystemen. Wenn Sie an Paging denken, werden Sie auf jeden Fall daran denken, LIMIT in SQL zu verwenden, um es zu implementieren. Die falsche Verwendung von LIMIT kann jedoch zu Leistungsproblemen führen (die SQL-Ausführung ist langsam und kann zum Absturz des Servers führen) und kann von Ihrem Vorgesetzten kritisiert werden. Sehen wir uns also an, wie LIMIT richtig verwendet wird.

Werfen wir einen Blick auf die ausführliche Einführung.

LIMIT OFFSET, ROW_COUNT zum Implementieren der Paginierung

Möglichkeiten für Leistungsprobleme

Wählen Sie * aus meiner Tabelle bestellen nach `id` LIMIT 1000000, 30

Die Person, die diese SQL-Anweisung geschrieben hat, muss gedacht haben: Die MySQL-Datenbank findet direkt die 1.000.000ste Zahl, die die Bedingungen erfüllt, und ruft dann 30 Daten ab.
Dies ist jedoch nicht die tatsächliche Funktionsweise von MySQL.

LIMIT 1000000, 30 bedeutet: 1000030 Zeilen scannen, die die Bedingung erfüllen, die ersten 1000000 Zeilen verwerfen und dann die letzten 30 Zeilen zurückgeben.

Ein besserer Weg

WÄHLEN Sie t.*
AUS (
  Wählen Sie die ID aus.
  VON myTable
  BESTELLEN BIS
    Ausweis
  GRENZE 1000000, 30
  ) Q
WERDEN SIE MITGLIED bei myTable t
EIN t.id = q.id

Das allgemeine Prinzip lautet:

  • Die Unterabfrage verwendet nur die Indexspalte und ruft keine tatsächlichen Daten ab. Sie erfordert daher keine Datenträger-E/A. Daher ist die Abfragegeschwindigkeit auch bei einem relativ großen Offset nicht zu langsam.

Freunde, die an der spezifischen Prinzipanalyse interessiert sind, können diesen Artikel lesen: MySQL ORDER BY / LIMIT-Leistung: Späte Zeilensuche

Nachtrag

Fortgesetzt werden.

Verweise

  • Warum verlangsamt ein höherer LIMIT-Offset von MySQL die Abfrage?
  • MySQL ORDER BY / LIMIT-Leistung: späte Zeilensuche

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Lösung zur Datenduplizierung bei Verwendung von Limit+Order By in der MySql-Paging
  • Warum wird die MySQL-Paging-Funktion bei Verwendung von Limits immer langsamer?
  • Beschreibung des MySQL-Optimierungsparameters query_cache_limit
  • Detaillierte Erläuterung der Fallstricke beim Mischen von MySQL-Order-By und Limit
  • Gründe und Optimierungslösungen für langsames MySQL-Limit-Paging mit großen Offsets
  • Mysql-Sortierung und Paginierung (Order by & Limit) und vorhandene Fallstricke
  • MySQL verwendet ein Limit, um die Beispielmethode für Paging zu implementieren
  • So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben
  • Eine kurze Diskussion über die Leistungsprobleme des MySQL-Paging-Limits
  • MySQL-Limit-Leistungsanalyse und -Optimierung
  • Warum wirkt sich die Verwendung von Limits in MySQL auf die Leistung aus?

<<:  So überwachen Sie die Windows-Leistung auf Zabbix

>>:  Detailliertes Beispiel des Kettenprogrammierstils von jQuery

Artikel empfehlen

Zeichnen Sie ein iPhone basierend auf CSS3

Ergebnis:Implementierungscode html <div Klasse...

80 Zeilen Code zum Schreiben eines Webpack-Plugins und Veröffentlichen auf npm

1. Einleitung Ich habe vor Kurzem die Prinzipien ...

Zusammenfassung der Bootstrap-Lernerfahrung - Austausch von Designs im CSS-Stil

Aufgrund der Anforderungen des Projekts habe ich ...

Mehrere Möglichkeiten zur manuellen Implementierung von HMR in Webpack

Inhaltsverzeichnis 1. Einleitung 2. GitHub 3. Gru...

Perfekte Lösung für keine rc.local-Datei in Linux

Neuere Linux-Distributionen verfügen nicht mehr ü...

So ändern Sie die IP-Einschränkungsbedingungen des MySQL-Kontos

Vorwort Kürzlich stieß ich bei der Arbeit auf ein...

Eine kurze Diskussion über den Unterschied zwischen src und href in HTML

Einfach ausgedrückt bedeutet src „Ich möchte dies...

Was wir über absolute und relative CSS-Werte zu sagen haben

In der Einleitung steht: Absolute sagte: „Relativ...

Eine eingehende Analyse von MySQL erläutert die Verwendung und die Ergebnisse

Vorwort Bei unserer täglichen Arbeit führen wir m...

Schritte zum Bereitstellen von Ingress-Nginx auf K8s

Inhaltsverzeichnis Vorwort 1. Bereitstellung und ...