Mehrere Implementierungsmethoden sowie Vor- und Nachteile der SQL-Paging-Abfrage in MySQL

Mehrere Implementierungsmethoden sowie Vor- und Nachteile der SQL-Paging-Abfrage in MySQL

【SQL】 Zusammenfassung der SQL-Paging-Abfragen

Während des Entwicklungsprozesses tritt häufig die Notwendigkeit einer Paginierung auf. Lassen Sie uns dies heute hier zusammenfassen.

Vereinfacht ausgedrückt gibt es zwei Methoden: Eine besteht in der Kontrolle an der Quelle, die andere in der Kontrolle am Ende. Die Quellcodeverwaltung platziert die Paging-Logik in der SQL-Ebene; die Clientsteuerung ruft alle Daten auf einmal ab und platziert die Paging-Logik in der Benutzeroberfläche (z. B. GridView). Offensichtlich ist die On-End-Steuerung weniger schwierig zu entwickeln und eignet sich für kleine Datenmengen, aber Leistung und IO-Verbrauch werden bei steigendem Datenvolumen inakzeptabel. Die On-Source-Steuerung ist in Bezug auf Leistung und Entwicklungsschwierigkeiten ausgewogener und für die meisten Geschäftsszenarien geeignet. Darüber hinaus kann je nach objektiven Bedingungen (Leistungsanforderungen, Ressourcennutzung der Quelle und des Endes usw.) eine Schicht zwischen der Quelle und dem Ende hinzugefügt werden, und für die Verarbeitung können spezielle Algorithmen und Technologien verwendet werden. Im Folgenden wird hauptsächlich die Paging-Funktion auf der Quelle, also SQL, besprochen.

Das Problem beim Paging besteht eigentlich darin, aus einem Stapel geordneter Daten, die die Bedingungen erfüllen, den Teil abzufangen, der aktuell angezeigt werden muss. Tatsächlich verfügen verschiedene Datenbanken über integrierte Strategien für Paging-Probleme, wie etwa LIMIT in MySql, ROWNUM und ROW_NUMBER() in Oracle und TOP und ROW_NUMBER() in SqlServer. Darauf basierend können wir eine Reihe von Paging-Methoden erhalten.

1. Basierend auf MySQLs LIMIT und Oracles ROWNUM können Sie den Rückgabebereich direkt begrenzen (nehmen Sie MySQL als Beispiel. Beachten Sie, dass bei Verwendung von Oracles ROWNUM eine Unterabfrage angewendet werden sollte):

Methode 1: Rückgabebereich direkt begrenzen

SELECT * FROM Tabelle WHERE Abfragebedingung ORDER BY Sortierbedingung LIMIT ((Seitenzahl - 1) * Seitengröße), Seitengröße;

Vorteile: Einfaches Schreiben.
Nachteile: Wenn die Seitenzahl und die Seitengröße zu groß sind, nimmt die Leistung erheblich ab.
Zutreffend: Die Datenmenge ist nicht groß.

2. Basierend auf LIMIT (MySql), ROWNUM (Oracle) und TOP (SqlServer) können sie die Anzahl der zurückgegebenen Zeilen begrenzen, sodass wir die folgenden beiden Sätze allgemeiner Methoden erhalten (am Beispiel von SqlServer):

Methode 2: NICHT IN

SELECT TOP Seitengröße * FROM Tabelle WHERE Primärschlüssel NOT IN
(
 SELECT TOP (Seitenzahl - 1) * Seitengröße Primärschlüssel FROM Tabelle WHERE Abfragebedingung ORDER BY Sortierbedingung)
ORDER BY Sortierbedingung

Vorteile: Große Vielseitigkeit.
Nachteile: Bei einer großen Datenmenge wird die Seite rückwärts gedreht und zu viele Daten in NOT IN beeinträchtigen die Leistung.
Zutreffend: Die Datenmenge ist nicht groß.

Methode 3: MAX

SELECT TOP Seitengröße * FROM Tabelle WHERE Abfragebedingung AND ID >
(
 Wählen Sie ISNULL (MAX (id), 0) aus 
 (
  SELECT TOP ((Seitenzahl - 1) * Seitengröße) id FROM Tabelle WHERE Abfragebedingung ORDER BY id 
 ) AS tempTable
) 
ORDER BY-ID

Vorteile: Schnell, insbesondere wenn die ID der Primärschlüssel ist.
Nachteile: eingeschränkte Anwendbarkeit, erfordert einheitliche und vergleichbare Sortierbedingungen.
Anwendbar: Einfache Sortierung (in Sonderfällen kann auch versucht werden, die Werte in ähnliche Vergleichswerte umzuwandeln und zu verarbeiten).

3. Basierend auf ROW_NUMBER () von SqlServer und Oracle kann die Zeilennummer der zurückgegebenen Daten ermittelt werden. Basierend darauf wird die folgende Methode erhalten, indem der Rückgabebereich eingeschränkt wird (am Beispiel von SqlServer):

Methode 4: ROW_NUMBER()

SELECT TOP Seitengröße * FROM 
(
 SELECT TOP (Seitenzahl * Seitengröße) ROW_NUMBER() OVER (ORDER BY Sortierbedingung) AS RowNum, * FROM Tabelle WHERE Abfragebedingung) AS tempTable
WHERE RowNum BETWEEN (Seitenzahl - 1) * Seitengröße + 1 AND Seitenzahl * Seitengröße ORDER BY RowNum

Vorteile: Es bietet Vorteile gegenüber NOT IN, wenn die Datenmenge groß ist.
Nachteil: Bei geringen Datenmengen nicht so gut wie NOT IN.
Gilt für: die meisten Anforderungen an Paging-Abfragen.

Das Obige ist meine bescheidene Meinung. Der Leistungsvergleich basiert auf Online-Informationen und persönlichen Einschätzungen. Es gibt keine ausführlichen Experimente. Bitte korrigieren Sie mich, wenn es unangemessene Punkte gibt.

Dies ist das Ende dieses Artikels über verschiedene Implementierungsmethoden und Vor- und Nachteile der Paging-Abfrage in MySQL. Weitere Informationen zu Paging-Abfragemethoden in MySQL finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird.

Das könnte Sie auch interessieren:
  • Tutorial zur MySQL-Optimierung: Große Paging-Abfrage
  • MySQL-Paging-Abfragemethode für Millionen von Datenmengen und ihre Optimierungsvorschläge
  • MySQL-Lösung zur Datenpaging-Abfrageoptimierung auf Millionenebene
  • Optimierung der Leistung von Paging-Abfragen für MySQL mit mehreren zehn Millionen Daten
  • Detaillierte Erläuterung der Mysql Limit Paging-Abfrageoptimierung
  • Beispiel einer Base64-Verarbeitungsmethode für MySQL-Ergebnisse einer PHP-Paging-Abfrage
  • Detaillierte Erläuterung der MySQL-Limitnutzung und Leistungsanalyse von Paging-Abfrageanweisungen
  • Techniken zur Optimierung von MySQL-Paging-Abfragen

<<:  JavaScript implementiert die umfassendste Codeanalyse einer einfachen Lupe (ES5)

>>:  Detaillierte Erläuterung des Prozesses zum Bereitstellen von MySql auf dem Centos-Server und zum Herstellen einer Verbindung mit Navicat

Artikel empfehlen

MySQL-Lösung für die Konfiguration mehrerer Instanzen

1.1 Was ist MySQL Multi-Instance? Einfach ausgedr...

Methoden zum Defragmentieren und Freigeben von Speicherplatz in MySQL-Tabellen

Inhaltsverzeichnis Ursachen der MySQL-Tabellenfra...

Erstellen Sie einen hochverfügbaren MySQL-Cluster mit Dual-VIP

Inhaltsverzeichnis 1. Projektbeschreibung: 2. Pro...

React+axios implementiert die Suchbenutzerfunktion von GitHub (Beispielcode)

laden Anforderung erfolgreich Anforderung fehlges...

Tutorial zur Installation von JDK und Tomcat unter Linux CentOS

Laden Sie zuerst JDK herunter. Hier verwenden wir...

Swiper+echarts realisiert den Links- und Rechts-Scrolleffekt mehrerer Dashboards

In diesem Artikel wird der spezifische Code von S...

Soll die Like-Funktion MySQL oder Redis verwenden?

Inhaltsverzeichnis 1. Häufige Fehler von Anfänger...

Detaillierte Beispiele zur Verwendung der Box-Shadow-Eigenschaft in CSS3

CSS enthält viele Attribute. Manche Attribute wer...

Beispiel für die Bereitstellung eines Django-Projekts mit Docker

Es ist auch sehr einfach, Django-Projekte mit Doc...