So bereinigen Sie Daten in einer MySQL-Onlinedatenbank

So bereinigen Sie Daten in einer MySQL-Onlinedatenbank

01 Szenarioanalyse

Heute Nachmittag hat ein Entwicklungskollege die Anforderung vorgeschlagen, einige Datensätze online zu löschen. Nach einem kurzen Blick auf die Datenverteilung wird geschätzt, dass mehr als 27 Millionen Datensätze in der Datentabelle gelöscht werden müssen. Die Gesamtzahl der Datensätze in der Datentabelle beträgt mehr als 28 Millionen, was bedeutet, dass die zu löschenden Datensätze den überwiegenden Großteil der gesamten Datensätze ausmachen. Wenn mehr als 27 Millionen Datensätze gelöscht werden, dauert es lange, sie zu verwenden, was sich definitiv auf das Online-Geschäft auswirken wird. Hier bauen wir den tatsächlichen Anwendungsfall einfach in folgende Methode um:

mysql> wähle Datum, Anzahl(*) aus test.tbl_a, gruppiere nach Datum;
+----------+----------+
| Datum | Anzahl(*) |
+----------+----------+
| | 63103 |
| 20190118 | |
| | 125916 |
| 20190120 | |
| | 129198 |
| 20190122 | |
| | 5191247 |
+----------+----------+
 Zeilen im Satz (13,21 Sek.)

Oben sehen Sie die Struktur der rekonstruierten Tabelle. Wir können sehen, dass die Datenmenge in jeder Gruppe nicht gering ist, nachdem die Tabelle tbl_b in der Testdatenbank nach Datum gruppiert wurde. Unsere Anforderung besteht darin, die Datensätze mit den Daten 20190118 und 20190123 zu löschen. Es ist ersichtlich, dass es mehr als 20 Millionen Datensätze dieser beiden Typen gibt, die den größten Teil der Daten in der Tabelle ausmachen. Wenn sie direkt gelöscht werden, wird das Online-Geschäft definitiv blockiert.

Im Folgenden sind die Betriebsmethoden aufgeführt. Es ist zu beachten, dass die Voraussetzung für die Anwendung der folgenden Betriebsmethoden lautet:

Die zu löschenden Daten machen den überwiegenden Großteil der Datentabelle aus.

02 Funktionsweise

Durch Analyse wissen wir, dass die verbleibenden Tabellendaten einen sehr kleinen Teil der gesamten Tabelle ausmachen. Dieser Vorgang ist in vier Schritte unterteilt:

1. Speichern wir zunächst die restlichen Daten in einer anderen Datenbank test1:

Tabelle test1.tbl_b_new erstellen als 
Wählen Sie * aus test.tbl_b 
wobei Datum in(,,,,);

Dieser Vorgang dauert nur etwa 3 Sekunden;

2. Wir erstellen eine Tabelle tbl_b mit demselben Namen in der Datenbank test1. Ihre Struktur entspricht der Datenstruktur tbl_b in der Testdatenbank:

Erstellen Sie die Tabelle test1.tbl_b wie test.tbl_b.

3. Als Nächstes verwenden wir die Umbenennungsoperation in der Datenbank, um die Tabelle tbl_b in der Tabelle test mit der Tabelle tbl_b in test1 auszutauschen, was dem Löschen aller Daten in der Tabelle in der Testdatenbank entspricht.

Tabelle test.tbl_b in test1.tbl_b_bak umbenennen,
         test1.tbl_b ZU test.tbl_b,
         test1.tbl_b_bak ZU test1.tbl_b;

4. Tragen Sie anschließend die restlichen im ersten Schritt gespeicherten Daten wie folgt in die neue Tabelle ein:

in test.tbl_b einfügen, * aus test1.tbl_b_new auswählen;

03 Ergebnisanalyse

Es scheint, dass wir das Problem komplizierter gemacht haben. Wir haben der direkten Löschung mehrere Schritte hinzugefügt. Aber das ist nicht der Fall. Diese Reihe von Vorgängen kann uns mehrere Minuten sparen und hat weniger Auswirkungen auf das Online-Geschäft. Die Gründe dafür sind folgende:

  1. Wir verwenden die Methode create table as, um die restlichen Datentabellen zu erstellen. Mit dieser Methode können wir nur einen kleinen Teil der Daten in der Datentabelle bearbeiten. Dadurch wird verhindert, dass wir zu viele Daten scannen.
  2. Beim Umbenennen einer großen Tabelle in MySQL ändert der Umbenennungsbefehl direkt die zugrunde liegende FRM-Datei und ist daher recht schnell.

Die zweite Funktion gibt uns eine Idee. Wenn wir in einem sehr dringenden Geschäft eine Tabelle verwenden müssen, haben wir oft nicht genug Zeit, um die Tabelle zu sichern. Wenn wir die Daten in einer großen Tabelle löschen möchten und entsprechende Sicherungen erstellen müssen, können wir dies schnell durch den Umbenennungsvorgang verarbeiten und dann einen Weg finden, die Tabelle nach der Umbenennung zu sichern.

Das obige Beispiel verwendet zwei Methoden zum Klonen von Tabellen: create table as und create table like. Dabei sind einige Punkte zu beachten:

Die Methode „Tabelle erstellen“ klont die Tabellenstruktur vollständig, fügt aber keine Daten ein. Sie müssen die Methode „Insert into“ oder „Load Data“ verwenden, um Daten separat zu laden.
Die Methode „Create Table as“ klont die Tabellenstruktur teilweise und lässt die Daten intakt.

Wenn Sie interessiert sind, können Sie einige Experimente durchführen, um dies zu überprüfen.

Oben finden Sie ausführliche Informationen zur Methode zum Bereinigen von Daten in einer MySQL-Online-Datenbank. Weitere Informationen zum Bereinigen von Daten in einer MySQL-Online-Datenbank finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Lösung für das Problem mit sicheren Dateiprivilegien beim Exportieren von MySQL-Daten
  • Beispiel für die Migration einer MySQL-Online-Protokollbibliothek
  • So erstellen Sie eine Tabelle in MySQL und fügen Feldkommentare hinzu
  • Optimierte Implementierung von count() für große MySQL-Tabellen
  • Einführung in die Verwendung von MySQL-Quellbefehlen
  • Ursachen und Lösungen für den MySQL-Fehler „zu viele Verbindungen“
  • Lösen Sie das Problem von secure_file_priv null

<<:  jquery+springboot realisiert die Datei-Upload-Funktion

>>:  Docker exec führt mehrere Befehle aus

Artikel empfehlen

Block- und Zeilenelemente, Sonderzeichen und Verschachtelungsregeln in HTML

Wenn wir die Verschachtelungsregeln grundlegender...

Detaillierte Erläuterung des Prozesses der Zabbix-Überwachung von SQLServer

Werfen wir einen Blick auf die Zabbix-Überwachung...

Detaillierte Erläuterung des Quellcodes der vue.$set()-Methode von Vue

Bei der Verwendung von Vue zum Entwickeln von Pro...

Tabelle zeigt den Grenzcode, den Sie anzeigen möchten

Gemeinsame Eigenschaften von Tabellen Die grundle...

Three.js realisiert den dynamischen 3D-Logoeffekt von Facebook Metaverse

Inhaltsverzeichnis Hintergrund Was ist das Metave...

Lösung zur automatischen Beendigung von Docker Run-Containern

Heute ist bei mir ein Problem aufgetreten, als ic...

React DVA-Implementierungscode

Inhaltsverzeichnis dva Verwendung von dva Impleme...

Beispielcode für CSS-Pseudoklassen zum Ändern des Eingabeauswahlstils

Hinweis: Diese Tabelle ist aus dem W3School-Tutor...

CSS-Einstellung Div-Hintergrundbild-Implementierungscode

Das Hinzufügen einer Hintergrundbildsteuerung zu ...

Detaillierte Erklärung der Verwendung von publicPath in Webpack

Inhaltsverzeichnis Ausgabe Ausgabepfad Ausgabe.öf...

Problemlösungsvorgänge für Alpine Docker-Bildschriftarten

1. Führen Sie Schriftarten aus, öffnen Sie den Sc...

Detaillierte Erklärung von JavaScript zur Überwachung von Routenänderungen

Inhaltsverzeichnis Geschichte pushState() Methode...

Tutorial zu XHTML-Webseiten

<br />Dieser Artikel soll Anfängern hauptsäc...

Lösung für Vues Unfähigkeit, Array-Änderungen zu beobachten

Inhaltsverzeichnis 1. Vue-Listener-Array 2. Situa...