Detaillierte Erläuterung der MySQL Limit-Leistungsoptimierung und der Paging-Daten-Leistungsoptimierung

Detaillierte Erläuterung der MySQL Limit-Leistungsoptimierung und der Paging-Daten-Leistungsoptimierung

MySQL Limit kann Datenbankdaten segmentweise abfragen und wird hauptsächlich beim Paging verwendet. Obwohl die Datenmenge der heutzutage geschriebenen Websites in die Tausende geht, spielen einige kleine Optimierungen keine große Rolle, die Entwicklung muss jedoch bis zum Äußersten gehen und eine perfekte Leistung anstreben. Im Folgenden sind einige Methoden zur Leistungsoptimierung aufgeführt.

Limit-Syntax:

SELECT * FROM Tabelle LIMIT [Offset,] Zeilen | Zeilen OFFSET Offset

Mit der LIMIT-Klausel können Sie eine SELECT-Anweisung zwingen, eine bestimmte Anzahl von Datensätzen zurückzugeben. LIMIT akzeptiert ein oder zwei numerische Argumente. Das Argument muss eine ganzzahlige Konstante sein.

Wenn zwei Argumente angegeben werden, gibt das erste Argument den Offset der ersten zurückgegebenen Zeile und das zweite Argument die maximale Anzahl der zurückgegebenen Zeilen an. Die anfängliche Datensatzzeile hat einen Offset von 0 (nicht 1).

Unterstützungslimit # Offset # Syntax:

mysql> SELECT * FROM table LIMIT 5,10; // Zeilen 6-15 abrufen
//Um alle Zeilen von einem bestimmten Offset bis zum Ende des Datensatzes abzurufen, können Sie den zweiten Parameter als -1 angeben
mysql> SELECT * FROM table LIMIT 95,-1; // Zeilen 96-letzte abrufen
//Wenn nur ein Parameter angegeben wird, gibt er die maximale Anzahl der zurückzugebenden Zeilen an. Mit anderen Worten, LIMIT n entspricht LIMIT 0,n
mysql> SELECT * FROM table LIMIT 5; // Rufe die ersten 5 Zeilen ab

Limit n,m bedeutet, m Datensätze auszuwählen, beginnend mit dem n-ten Datensatz. Die meisten Entwickler verwenden diese Art von Anweisung gerne, um das klassische Paging-Problem im Web zu lösen. Bei kleinen Datensätzen ist dies kein großes Problem. Bei Anwendungen wie Foren, die möglicherweise sehr große Datenmengen enthalten, ist die Effizienz der Grenze n,m sehr gering. Weil die Daten jedes Mal neu ausgewählt werden müssen. Wenn Sie nur die ersten fünf Datensätze auswählen, ist dies sehr einfach und bequem. Wenn Sie jedoch bei 1 Million Datensätzen fünf Datensätze ab der 800.000. Zeile auswählen, müssen Sie die Datensätze dennoch bis zu dieser Position scannen.

Das heißt, das Limit 10000,20 bedeutet, dass 10020 Zeilen gescannt werden, die die Bedingungen erfüllen, die ersten 10000 Zeilen verworfen und die letzten 20 Zeilen zurückgegeben werden. Hier liegt das Problem. Wenn das Limit 100000,100 verwendet wird, müssen 100100 Zeilen gescannt werden. In einer Anwendung mit hoher Parallelität muss jede Abfrage mehr als 100.000 Zeilen scannen, und die Leistung wird definitiv stark reduziert.

Vergleich der Datenleseeffizienz bei unterschiedlichen Datenmengen:

1. Wenn der Versatz klein ist:

Wählen Sie * aus Tabellenlimit 5,10

Nach mehreren Durchläufen blieb die Zeit zwischen 0,0004 und 0,0005

Wählen Sie * aus der Tabelle, wobei ID >=( 
ID aus Tabelle auswählen Sortieren nach ID-Limit 10,1 
) Grenze 10

Nach mehreren Durchläufen blieb die Zeit zwischen 0,0005 und 0,0006. Daher ist es bei kleinem Offset effizienter, das Limit direkt zu verwenden!

2. Wenn die Offsetdaten groß sind:

wähle * aus Tabellenlimit 10000,10

Nach mehreren Durchläufen blieb die Zeit bei etwa 0,0187 Sekunden.

Wählen Sie * aus der Tabelle, wobei ID >=( 
Wählen Sie die ID aus der Tabelle aus. Sortieren nach ID-Limit 10000,1 
) Grenze 10

Nach mehreren Durchläufen blieb die Zeit bei etwa 0,061 Sekunden, also etwa 1/3 der vorherigen Zeit. Wenn der Offset groß ist, ist die Verwendung des letzteren daher weniger effizient! Dies ist das Ergebnis der Verwendung der ID als Index.

Wenn die ID als Primärschlüssel der Datentabelle verwendet wird:

wähle ID aus Tabellenlimit 10000,10

Die Abfrage dauert ca. 0,04 Sekunden, was daran liegt, dass als Index der Primärschlüssel id verwendet wird.

Leistungsoptimierung einschränken:

Wählen Sie * aus der Zyklopädie, wobei ID>=( 
Wählen Sie Max(ID) aus ( 
ID aus der Zyklopädie auswählen Sortieren nach ID-Limit 90001 
) Als tmp 
) Grenze 100; 
Wählen Sie * aus der Enzyklopädie, wobei ID>=( 
Wählen Sie Max(ID) aus ( 
ID aus der Enzyklopädie auswählen Sortieren nach ID-Limit 90000,1 
) Als tmp 
) Grenze 100;

Der zweite Satz ist schneller, wenn die letzten 100 von 90.000 Datensätzen abgerufen werden. Denn der erste Satz nimmt zuerst die ersten 90.001 Datensätze, nimmt den größten ID-Wert als Startkennung und verwendet ihn dann, um schnell die nächsten 100 Datensätze zu lokalisieren; während der zweite Satz nur den letzten Datensatz nimmt und dann den ID-Wert als Startkennung verwendet, um die nächsten 100 Datensätze zu lokalisieren. Der zweite Satz lässt sich wie folgt verkürzen:

Wählen Sie * aus der Zyklopädie, wobei ID>=( 
Wählen Sie „ID aus“ ( 
ID aus der Enzyklopädie auswählen Sortieren nach ID-Limit 90000,1 
) Als tmp 
) Grenze 100;

Der Max-Vorgang wird ausgelassen und IDs werden grundsätzlich erhöht.

Optimierung der Paging-Datenleistung:

1. Für Datentabellen mit großen Datenmengen können Sie Primärschlüssel und Indexfelder erstellen, um Indextabellen zu erstellen, die entsprechenden Primärschlüssel über die Indextabellen abzufragen und dann die Datentabellen mit großen Datenmengen über die Primärschlüssel abzufragen.

2. Wenn Sie eine Where-Bedingung haben und den Index zum Verwenden des Limits verwenden möchten, müssen Sie einen Index entwerfen, zuerst „Where“ und dann den für das Limit verwendeten Primärschlüssel eingeben und Sie können nur den Primärschlüssel auswählen! Dadurch erhöht sich die Lesegeschwindigkeit

3. Verwendung in: Erhalten Sie zuerst den entsprechenden Primärschlüsselwert über die Where-Bedingung und verwenden Sie dann den Primärschlüsselwert, um den entsprechenden Feldwert abzufragen.

Blättern mit dem Cursor:

Um die beste Abfrageleistung für MySQL zu erreichen, habe ich die Paging-Abfrage in den Cursor-Abfragemodus geändert:

Wählen Sie * aus der Tabelle, wo ID > letzte ID, Limit 20, Sortierung nach Antwort-ID ASC;

Die obige last_id ist die ID des letzten Datensatzes auf dieser Seite, sodass die Abfrage „Nächste Seite“ und entsprechend auch die Abfrage „Vorherige Seite“ realisiert werden kann.

Cursor-Paging ist nur für sequentielle Daten geeignet und unterstützt keine Seitensprünge. Wir können eine Auto-Inkrement-ID erstellen oder der Datentabelle geordnete Felder hinzufügen: Bei Projekten mit großen Datenmengen sind Seitensprünge nicht sehr nützlich, und Sie können Filterbedingungen verwenden, um den Suchzweck zu erreichen.

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. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • MySQL-Abfrageoptimierung: LIMIT 1 vermeidet vollständigen Tabellenscan und verbessert die Abfrageeffizienz
  • 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
  • Einfaches Beispiel für den Grenzwertparameter der MySQL-Paging
  • 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
  • So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben
  • Detaillierte Erläuterung des Problems der gemischten Verwendung von Limit- und Summenfunktionen in MySQL
  • So verbessern Sie die MySQL Limit-Abfrageleistung
  • Eine kurze Diskussion über die Implementierung der MySQL-Lösung zur Optimierung des Seitenlimits
  • Die Auswirkungen des Limits auf die Abfrageleistung in MySQL

<<:  Führen Sie die folgenden Schritte aus, um Vue-Router in Vue3 zu verwenden

>>:  Docker setzt Macvlan ein, um eine hostübergreifende Netzwerkkommunikation zu erreichen

Artikel empfehlen

Verwenden von NTP zur Zeitsynchronisierung in Ubuntu

NTP ist ein TCP/IP-Protokoll zur Zeitsynchronisie...

So erstellen Sie einen DHCP-Server in Linux

Inhaltsverzeichnis 1. Grundkenntnisse: 2. DHCP-Se...

24 praktische Tipps zur JavaScript-Entwicklung

Inhaltsverzeichnis 1. Initialisieren Sie das Arra...

Detaillierte Erläuterung des Zeitdarstellungsbeispiels des Linux-Zeitsubsystems

Vorwort Um zum Originalcode kompatibel zu sein, b...

So implementieren Sie Code und Schritte für den digitalen Paging-Effekt in CSS

Eine beträchtliche Anzahl von Websites verwendet d...

Detaillierte Beispiele für Ersetzen und Ersetzen in MySQL into_Mysql

„Replace“ und „Replace into“ von MySQL sind beide...

So isolieren Sie Benutzer in Docker-Containern

Im vorherigen Artikel „UID und GID in Docker-Cont...

Grafisches Tutorial zum Herunterladen und Installieren von MySQL 5.7 und höher

1. Herunterladen 1. Download-Adresse der offiziel...

Beispielcode einer in Vue3 gekapselten Lupenkomponente

Inhaltsverzeichnis Komponenteninfrastruktur Zweck...

Detaillierte Erklärung zum Anzeigen der MySQL-Speichernutzung

Vorwort Dieser Artikel stellt hauptsächlich die r...

Detaillierte Erläuterung des Vue Router Routing Guard

Inhaltsverzeichnis 1. Global vor jedem 1. Global ...