1. ProblemszenarioEine neue Funktion zum Exportieren von Transaktionsdatensätzen wurde eingeführt. Die Logik ist ganz einfach: Exportieren Sie die entsprechenden Daten basierend auf den Abfragebedingungen. Aufgrund der großen Datenmenge wurde bei der Abfrage der Datenbank eine Paginierungsabfrage verwendet, wobei jedes Mal 1.000 Datensätze abgefragt wurden. Der Selbsttest verläuft normal, die Testumgebung ist normal und die nach dem Online-Gehen durch die Betriebsrückmeldung exportierten Daten weisen doppelte Datensätze auf . Ich dachte zunächst, dass es sich um ein Problem mit der Geschäftslogik handele 2. Ursachenanalyse Die Abfrageanweisung wird in absteigender Reihenfolge nach Das folgende Szenario tritt auf: Beim Sortieren nach Wenn beispielsweise Mit anderen Worten: Die Daten springen hin und her, erscheinen eine Zeit lang auf der ersten Seite und eine Zeit lang auf der zweiten Seite, was dazu führt, dass ein Teil der exportierten Daten wiederholt wird und ein Teil fehlt. Ich habe die offizielle Dokumentation zu MySQL 5.7 und 8.0 überprüft und die Beschreibung lautet wie folgt:
Um das oben Gesagte zusammenzufassen: Wenn Sie Um es einfach auszudrücken: Wenn bei per 3. Lösung Die grundlegende Lösung des oben genannten Problems besteht darin, eine Duplizierung von Werten in Wählen Sie * aus tb_order, Reihenfolge nach Erstellungszeit, ID desc; Auf diese Weise wird, wenn 4. Erweitern Sie Ihr Wissen Tatsächlich wurden die obigen Inhalte auf der offiziellen 4.1 Abfrageoptimierung einschränkenWenn wir nur einen Teil eines Ergebnissatzes abfragen, sollten wir nicht alle Daten abfragen und anschließend die nicht benötigten Daten verwerfen, sondern diese durch die Grenzbedingung einschränken. Wenn die Having-Bedingung nicht verwendet wird, kann MySQL die Limit-Bedingung optimieren:
Nachdem wir nun einige Funktionen von 4.2 Limit und Order by gemeinsam verwenden Wie im zweiten Punkt oben erwähnt, besteht eine der Eigenschaften der Kombination aus Im folgenden Beispiel wird die Sortierabfrage basierend auf der Kategoriespalte ausgeführt, während die ID und die Bewertung unsicher sind: mysql> SELECT * FROM Bewertungen ORDER BY Kategorie; +----+----------+--------+ | ID | Kategorie | Bewertung | +----+----------+--------+ | 1 | 1 | 4,5 | | 5 | 1 | 3,2 | | 3 | 2 | 3,7 | | 4 | 2 | 3,5 | | 6 | 2 | 3,5 | | 2 | 3 | 5,0 | | 7 | 3 | 2,7 | +----+----------+--------+ Wenn eine Abfrageanweisung ein Limit enthält, kann sie sich auf Daten mit demselben Kategoriewert auswirken: mysql> SELECT * FROM Bewertungen ORDER BY Kategorie LIMIT 5; +----+----------+--------+ | ID | Kategorie | Bewertung | +----+----------+--------+ | 1 | 1 | 4,5 | | 5 | 1 | 3,2 | | 4 | 2 | 3,5 | | 3 | 2 | 3,7 | | 6 | 2 | 3,5 | +----+----------+--------+ Die Ergebnispositionen der ID 3 und 4 haben sich geändert. In der Praxis ist es oft sehr wichtig, die Reihenfolge der Abfrageergebnisse beizubehalten. In diesem Fall müssen andere Spalten eingeführt werden, um die Reihenfolge der Ergebnisse sicherzustellen. Nachdem die ID im obigen Beispiel eingeführt wurde, lauten die Abfrageanweisung und die Ergebnisse wie folgt: mysql> SELECT * FROM Bewertungen ORDER BY Kategorie, ID; +----+----------+--------+ | ID | Kategorie | Bewertung | +----+----------+--------+ | 1 | 1 | 4,5 | | 5 | 1 | 3,2 | | 3 | 2 | 3,7 | | 4 | 2 | 3,5 | | 6 | 2 | 3,5 | | 2 | 3 | 5,0 | | 7 | 3 | 2,7 | +----+----------+--------+ mysql> SELECT * FROM Bewertungen ORDER BY Kategorie, ID LIMIT 5; +----+----------+--------+ | ID | Kategorie | Bewertung | +----+----------+--------+ | 1 | 1 | 4,5 | | 5 | 1 | 3,2 | | 3 | 2 | 3,7 | | 4 | 2 | 3,5 | | 6 | 2 | 3,5 | +----+----------+--------+ Es ist ersichtlich, dass beim Hinzufügen der Sortierung der ID-Spalte kein Unordnungsproblem auftritt, selbst wenn 5. Zusammenfassung Ursprünglich haben wir aufgrund gelegentlicher Fallstricke in der Praxis über die Optimierung von Viele Freunde verwenden Dies ist das Ende dieses Artikels über die Details der MySQL-Sortierfunktionen. Weitere relevante MySQL-Sortierfunktionen finden Sie in früheren Artikeln auf 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:
|
<<: CSS3 zum Erzielen von Zeitleisteneffekten
>>: Verwenden Sie momentJs, um eine Countdown-Komponente zu erstellen (Beispielcode)
ElementUI implementiert das Tutorial zum Paginier...
Entsprechend den wichtigsten Websites und persönl...
1. Zusammensetzung und verwandte Konzepte der MyS...
In diesem Artikel wird der spezifische Code von R...
In diesem Artikel werden 3 Methoden beschrieben, ...
Vorwort Beim Betrieb und der Verwaltung von Linux...
MySQL ist eine häufig verwendete Open-Source-Date...
Inhaltsverzeichnis 1. Laden Sie JDK herunter (neh...
In unserem Leben, bei der Arbeit und beim Studium ...
Verschachtelte Verwendung von MySQL ifnull Ich ha...
Inhaltsverzeichnis mvc MVP mvv Die Quelle von Vue...
Dieser Artikel beschreibt anhand eines Beispiels ...
Hinzufügen einer Netzwerkschnittstelle zum Contai...
1. Einleitung Wie wir alle wissen, muss im Anwend...
Heute Wählen Sie * aus Tabellenname, wobei to_day...