Mit der Zeit oder mit zunehmendem Geschäftsvolumen steigt die Auslastung des Datenbankspeicherplatzes stetig an. Wenn der Datenbankspeicherplatz einen Engpass erreicht, stellen wir möglicherweise fest, dass die Datenbank eine oder zwei sehr große Tabellen enthält! Sie haben vom Beginn des Geschäfts bis heute alle Daten gesammelt, aber 90 % der Daten haben keinen Geschäftswert. Wie sollen sie zu diesem Zeitpunkt mit diesen großen Tabellen umgehen? Da es sich um wertlose Daten handelt, löschen wir sie normalerweise direkt oder nach der Archivierung. Die Vorgehensweise zum Löschen von Daten kann in zwei Kategorien unterteilt werden:
1. Truncate-OperationLogisch gesehen löscht der Truncate-Vorgang alle Zeilen in der Tabelle, er unterscheidet sich jedoch vom Vorgang „Löschen aus Tabellenname, wobei 1=1 ist“. Um die Leistung beim Löschen der gesamten Tabellendaten zu verbessern, besteht die Truncate-Operation von MySQL tatsächlich darin, zuerst die Tabelle zu löschen und sie dann neu zu erstellen. Aus diesem Grund handelt es sich bei der Truncate-Operation um eine DDL-Operation ohne Rollback. 1.1 Welche Operationen führt MySQL Truncate aus?
1.2 Wie kann der durch den Truncate-Vorgang verursachte Ressourcenverbrauch optimiert werden?
2. Löschvorgang 2.1 Welche Vorgänge führt MySQL Delete aus?
2.2 Wie lassen sich Löschvorgänge optimieren?
2.3 Zwei häufige Löschszenarien 2.3.1 Löschen, wenn die Bedingung keine gültige Indexfilterung hat Ein häufiges Szenario ist, dass das Unternehmen den Wert von t1 condition1=xxx löschen muss. Das Bedingungsfeld kann den Index nicht effektiv verwenden. In diesem Fall gehen wir normalerweise wie folgt vor:
-- Verwenden Sie den selbstinkrementierenden Primärschlüsselindex, um aus t1 zu löschen, wobei Bedingung1=xxx und ID >=1 und ID < 50000; Löschen Sie aus t1, wobei Bedingung1=xxx und ID >=50000 und ID < 100000; -- Verwenden Sie den Zeitindex zum Löschen ab t1, wobei Bedingung1=xxx und Erstellungszeit >= ‚2021-01-01 00:00:00‘ und Erstellungszeit < ‚2021-02-01 00:00:00‘; Löschen aus t1, wobei Bedingung1=xxx und Erstellungszeit >= ‚2021-02-01 00:00:00‘ und Erstellungszeit < ‚2021-03-01 00:00:00‘; 2.3.2 Aktuelle Daten behalten und historische Daten löschen Ein häufiges Szenario ist, dass Sie nur die Daten der Tabelle t1 der letzten drei Monate behalten und den Rest der historischen Daten löschen müssen. Unser üblicher Ansatz ist: Erstellen Sie eine t1_tmp-Tabelle, um Daten, die aufbewahrt werden müssen, vorübergehend zu speichern Erstellen Sie Tabelle t1_tmp wie t1. Schreiben Sie die beizubehaltenden Daten gemäß dem indizierten Zeitfeld stapelweise in die Tabelle t1_tmp. Es ist zu beachten, dass der Vorgang des letzten Zeitstapels vorübergehend ignoriert werden kann. -- Teilen Sie die Daten entsprechend der Anzahl der Instanzunternehmen in Stapel auf und versuchen Sie, in jedem Stapel nicht zu viele Daten zu verarbeiten. Einfügen in t1_tmp. Auswählen * von t1, wobei create_time >= '2021-01-01 00:00:00' und create_time < '2021-02-01 00:00:00'; einfügen in t1_tmp, auswählen * aus t1, wobei create_time >= '2021-02-01 00:00:00' und create_time < '2021-03-01 00:00:00'; -- Der letzte Datenstapel wird noch nicht verarbeitet -- insert into t1_tmp select * from t1 where create_time >= '2021-03-01 00:00:00' and create_time < '2021-04-01 00:00:00'; Verwenden Sie den Umbenennungsvorgang, um die aktuelle Geschäftstabelle t1 durch die Tabelle t1_bak und die Tabelle t1_tmp durch den aktuellen Geschäftstabellennamen t1 zu ersetzen. Wenn häufig DML-Vorgänge auf die gelöschte Tabelle angewendet werden, führt dieser Schritt zu einem kurzfristigen Geschäftszugriffsfehler. Tabelle t1 ändern und in t1_bak umbenennen; Tabelle t1_tmp ändern und in t1 umbenennen; Schreiben Sie den letzten Datensatz in die aktuelle Geschäftstabelle. Der Zweck dieses Schritts besteht darin, den Datenverlust während des Änderungsvorgangs zu reduzieren. in t1 einfügen, auswählen * aus t1_bak, wobei create_time >= '2021-03-01 00:00:00' und create_time < '2021-04-01 00:00:00'; Im Umbenennungsvorgang müssen wir außerdem darauf achten, ob der Primärschlüssel der Änderungstabelle selbstinkrementierend oder die unternehmensspezifische UUID ist. Wenn es sich um einen selbstinkrementierenden Primärschlüssel handelt, müssen wir auch darauf achten, den selbstinkrementierenden Wert der Tabelle t1_tmp zu ändern, um sicherzustellen, dass der endgültige Einstellungswert die während des Änderungszeitraums geschriebenen Daten enthält. alter table t1_tmp auto_increment={aktueller Autowert der T1-Tabelle}+{geschätzter Wachstumswert während des Änderungszeitraums} III. Vergleich der Vor- und Nachteile von Truncate/Delete
Dies ist das Ende dieses Artikels zum eleganten Löschen großer Tabellen in MySQL. Weitere Informationen zum Löschen großer Tabellen in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Webdesigner ist ein geeignetes Talent
Das Modul async_hooks ist eine experimentelle API...
Inhaltsverzeichnis JS erhält den Inhalt der TXT-D...
Inhaltsverzeichnis 1. Übersicht 2. Speicherverwal...
Konventionelle Lösung Verwenden Sie FileReader, u...
So ändern Sie den Bild-Hyperlink, wenn Sie mit der...
Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Ausf...
Inhaltsverzeichnis Beispielcode Rendern Code-Anal...
Das Installations-Tutorial für die dekomprimierte...
Inhaltsverzeichnis 1. Digitale Aufzählung 2. Zeic...
nginx (Engine x) ist ein leistungsstarker HTTP- u...
Inhaltsverzeichnis Vorwort Globale Sperre Tabelle...
Nachfolgend finden Sie die Schnellbefehle zum Fre...
<br />Informationsduplikation, Informationsü...
Es gibt einige Probleme, die nicht auf Vue beschr...
1. Installation Suchen Sie über DockerHub nach de...