Ein Freund fragte: MySQL-Paging scheint schon immer ein Problem gewesen zu sein. Gibt es eine Optimierungsmethode? Ich habe im Internet einige empfohlene Paging-Methoden gesehen, aber sie scheinen nicht machbar zu sein. Können Sie etwas dazu sagen?
Methode 1: Verwenden Sie direkt die von der Datenbank bereitgestellte SQL-Anweisung
---Anweisungsstil: In MySQL kann die folgende Methode verwendet werden: SELECT * FROM Tabellenname LIMIT M,N.
---Anwendbare Szenarien: Geeignet für Situationen, in denen die Datenmenge gering ist (Tupelebenen von Hunderten/Tausenden).
---Grund/Nachteil: Der vollständige Tabellenscan ist sehr langsam und einige Datenbankergebnissätze geben instabile Ergebnisse zurück (z. B. geben sie einmal 1,2,3 und ein anderes Mal 2,1,3 zurück). Limit schränkt N Ausgaben von M Positionen in der Ergebnismenge ein und verwirft den Rest.
Methode 2: Erstellen Sie einen Primärschlüssel oder einen eindeutigen Index und verwenden Sie den Index (vorausgesetzt, 10 Elemente pro Seite)
---Anweisungsstil: In MySQL stehen die folgenden Methoden zur Verfügung:
SELECT * FROM Tabellenname WHERE id_pk > (pageNum*10) LIMIT M.
---Anwendbare Szenarien: Geeignet für Situationen mit großen Datenmengen (Zehntausende Tupel).
---Grund: Der Index-Scan geht sehr schnell. Ein Freund schlug vor, dass es Fälle fehlender Daten geben wird, da die Datenabfrage nicht nach pk_id sortiert ist. Daher ist die einzige Option Methode 3.
Methode 3: Neuordnung basierend auf dem Index
---Anweisungsstil: In MySQL kann die folgende Methode verwendet werden: SELECT * FROM table name WHERE id_pk > (pageNum*10) ORDER BY id_pk ASC LIMIT M.
--- An Szenarien anpassen: Geeignet für Situationen mit einer großen Datenmenge (Zehntausende von Tupeln). Es ist am besten, dass das Spaltenobjekt nach ORDER BY der Primärschlüssel oder eindeutig ist, damit die ORDER BY-Operation eliminiert werden kann Verwenden Sie den Index, aber die Ergebnismenge ist stabil (zur Bedeutung von Stabilität siehe Methode 1).
---Grund: Der Index-Scan wird sehr schnell sein, aber der Sortiervorgang von MySQL verfügt nur über ASC und nicht über DESC (DESC ist eine Fälschung, echtes DESC wird in Zukunft durchgeführt, freuen Sie sich darauf).
Methode 4: Verwenden Sie die auf dem Index basierende Vorbereitung (das erste Fragezeichen steht für pageNum, das zweite? für die Anzahl der Tupel pro Seite)
---Anweisungsstil: In MySQL stehen die folgenden Methoden zur Verfügung:
PREPARE stmt_name FROM SELECT * FROM table name WHERE id_pk > (?* ?) ORDER BY id_pk
ASC LIMIT M.
---Anpassen an Szenarien: großes Datenvolumen.
---Grund: Der Indexscan erfolgt sehr schnell. Die Prepare-Anweisung ist schneller als die allgemeine Abfrageanweisung.
Methode 5: Durch die Verwendung von MySQL zur Unterstützung von ORDER-Operationen können Sie Indizes verwenden, um einige Tupel schnell zu finden und vollständige Tabellenscans zu vermeiden
---Zum Beispiel: Lesen Sie die Tupel in den Zeilen 1000 bis 1019 (pk ist der Primärschlüssel/eindeutige Schlüssel).
---SELECT * FROM your_table WHERE pk>=1000 ORDER BY pk ASC LIMIT 0,20.
Methode 6: Verwenden Sie „Unterabfrage/Join + Index“, um das Tupel schnell zu finden, und lesen Sie es dann. Das Prinzip ist das gleiche wie bei Methode 5
---Zum Beispiel (id ist der Primärschlüssel/eindeutige Schlüssel, Variable in blauer Schrift):
Beispiel für die Verwendung einer Unterabfrage:
SELECT * FROM your_table WHERE id <= (SELECT id FROM your_table ORDER BY id desc LIMIT ($page-1)*$pagesize ORDER BY id desc LIMIT $pagesize
Beispiel für eine Nutzungsverbindung:
SELECT * FROM your_table AS t1 JOIN (SELECT id FROM your_table ORDER BY id desc LIMIT ($page-1)*$pagesize AS t2 WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;
Methode 7: Gespeicherte Prozedurklasse (am besten kombinieren Sie die oben genannten Methoden 5/6)
---Anweisungsstil:
wird nicht mehr angegeben ---Anpassen an Szenarien: große Datenmengen Die vom Autor empfohlene Methode
---Grund: Die Kapselung des Vorgangs im Server ist relativ schneller.
Methode 8: Negativmethode
---Jemand im Internet hat über die Verwendung von SQL_CALC_FOUND_ROWS geschrieben. Es macht keinen Sinn, ahmen Sie es nicht nach.
Grundsätzlich ist es auf alle Datenbanken erweiterbar und das Prinzip ist dasselbe. Methode 5 kann jedoch nicht auf andere Datenbanken ausgeweitet werden. Voraussetzung für die Heraufstufung ist, dass andere Datenbanken ORDER BY-Operationen unterstützen und Indizes verwenden können, um die Sortierung direkt abzuschließen.
Das obige ist der detaillierte Inhalt vonZusammenfassung der MySQL-Paging-Technologie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!