Die LIMIT-Klausel kann verwendet werden, um eine SELECT-Anweisung zu zwingen, eine bestimmte Anzahl von Datensätzen zurückzugeben. LIMIT akzeptiert ein oder zwei numerische Argumente. Der Parameter muss eine ganzzahlige Konstante sein. Wenn zwei Parameter angegeben werden, gibt der erste Parameter den Offset der ersten zurückgegebenen Datensatzzeile an, und der zweite Parameter gibt die maximale Anzahl zurückgegebener Datensatzzeilen an. Der Offset der ersten Datensatzzeile beträgt 0 (nicht 1). Im Folgenden fassen wir MySQL-Paging-Abfragen für Sonderfälle zusammen.
MySQL bietet eine Paging-Funktion:
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
Die einfachste Verwendung ist:
select * from table limit ?,?
Dies ist die einfachste Limit-Paging-Abfrage. Mit Where-Bedingungen verwenden:
select * from table where column > ? order by id limit ?,?
In der oben genannten Situation wird empfohlen, einen zusammengesetzten Index für Spalte und ID zu erstellen.
In den beiden oben genannten Fällen reicht ein solches SQL für Paging-Abfragen mit kleinen Datenmengen aus. Wenn Sie jedoch für Datentabellen mit Millionen von Ebenen oder mehr das obige SQL verwenden, wird der Offset der Limit-Anweisung immer größer und die Abfrage wird immer langsamer. Ähnlich wie:
select * from `user` where `cate`='陕西' order by id limit 100000,10
Um diese Art von Abfrage zu vermeiden, können wir die Abfrageeffizienz durch Unterabfrage verbessern.
select * from `user` where id >=(select * from `user` where `cate`='陕西' order by id limit 100000,1) and `cate`='陕西' limit 10
Durch Erklären können wir den Unterschied zwischen direkter Limit-Abfrage und Unterabfrage erkennen:
Direkte Limit-Abfrage:
type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|
ALL | (NULL) | (NULL) | (NULL) | (NULL) | 4076607 |
Unterabfrage-Paging-Abfrage:
type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|
PRIMARY | range | PRIMARY | PRIMARY | 4 | 2038331 | Using where |
SUBQUERY | index | (NULL) | PRIMARY | 4 | 4076663 | Using index |
Es ist ersichtlich, dass durch Unterabfrage die Unterabfrage für den Index ausgeführt wird, während die normale Abfrage für die Datendatei ausgeführt wird. Im Allgemeinen sind Indexdateien viel kleiner als Datendateien, sodass die Bedienung von Indexdateien direkter und effizienter ist.
Darüber hinaus können Sie auch die Methode Join-Paging verwenden.
SELECT * FROM `user` AS t1 JOIN (SELECT id FROM `user` ORDER BY id LIMIT 100000, 1) AS t2 WHERE t1.id <= t2.id ORDER BY t1.id LIMIT 10;
Die Effizienz von Join-Paging und Unterabfrage-Paging liegt grundsätzlich auf dem gleichen Niveau. (Unterabfragen müssen jedoch temporäre Tabellen im Speicher erstellen. Nach Abschluss der Abfrage muss MySQL diese temporären Tabellen löschen. Diese Situation kann durch Beitritt vermieden werden.) Bevor Sie die Abfrage auslagern, können Sie eine Beurteilung vornehmen Begrenzte Anzahl von Seiten, verwenden Sie einfach die einfache Paging-Abfrage und verwenden Sie die Paging-Verarbeitung mit Unterabfragen, wenn sie größer als 1 ist.
Verwandte Empfehlungen:
Untersuchung der MySQL-Paging-Leistung
MySQL-Paging-Optimierungstestfall
Leitfaden zur Optimierung der MySQL-Paging-Leistung
Das obige ist der detaillierte Inhalt vonBeispielerklärung für eine MySQL-Paging-Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!