Die Frage wird zitiert von: https://www.zhihu.com/question/440066129/answer/1685329456. In MySQL gibt es 300 Millionen Daten in einer Tabelle, die nicht in Tabellen unterteilt ist. Eines der Felder ist der Unternehmenstyp. Die Unternehmenstypen sind allgemeine Unternehmen und selbstständige Einzelpersonen. Die Datenmenge für selbstständige Einzelpersonen beträgt etwa 50 %. Gemäß den Bedingungen werden alle Zeilen der selbstständigen Einzelpersonen gelöscht. Wie mache ich das? Die Antwort ist originell Angenommen, die Tabellen-Engine ist Innodb, MySQL 5.7+ Um einen Datensatz zu löschen, sperren Sie zuerst den Datensatz, verwerfen Sie die Originaldaten und ändern Sie den Datensatzkopf, hauptsächlich durch Hinzufügen eines Löschzeichens. Das heißt, das „deleteed_flag“ der ursprünglichen Daten wird zu 1 und zeigt damit an, dass die Daten gelöscht wurden. Die Daten werden jedoch nicht gelöscht, und wenn die Größe einer neuen Datenzeile kleiner als die dieser Zeile ist, kann sie diese Zeile belegen. Dabei handelt es sich eigentlich um eine Speicherfragmentierung. Anschließend muss der Index der zugehörigen Daten aktualisiert werden, um die Daten zu löschen. Darüber hinaus werden entsprechende Binlog- und Redolog-Protokolle generiert.
LösungMan könnte leicht glauben, dass man durch das Hinzufügen eines Limits nach dem Löschen die Anzahl der Löschungen steuern kann. Diese Zahl führt dazu, dass der Index durchlaufen wird und nicht die gesamte Tabelle gesperrt wird. Die Probleme der Speicherfragmentierung, der Master-Slave-Synchronisierung und der Speicherplatzbelegung wurden jedoch nicht gelöst. Nachdem der Löschvorgang abgeschlossen ist, können Sie die Tabelle mit der folgenden Anweisung neu erstellen: ändern Sie Ihre Tabelle, Engine=InnoDB, ALGORITHM=INPLACE, LOCK=NONE; Beachten Sie, dass dieser Satz Ihre Tabelle tatsächlich neu erstellt. Obwohl die Engine Ihrer Tabelle bereits InnoDB ist, können Sie die Tabelle neu erstellen, ohne sie zu sperren, indem Sie am Ende ALGORITHM=INPLACE, LOCK=NONE hinzufügen. Eine andere Lösung besteht darin, eine neue Tabelle mit derselben Struktur zu erstellen und der Originaltabelle einen Trigger hinzuzufügen: Trigger „person_trigger_update“ NACH DEM UPDATE für jede Zeile der Originaltabelle erstellen beginne mit dem Setzen von @x = "UPDATE auslösen"; In neue Tabelle ersetzen. SELECT * aus Originaltabelle, wobei neue Tabellen-ID = Original-Tabellen-ID; ENDE, WENN; Ende; Dadurch wird sichergestellt, dass neue Daten für das Online-Geschäft synchronisiert werden. Fügen Sie anschließend alle Unternehmensdaten in die neue Tabelle ein. Wenn die Daten bereits vorhanden sind, werden sie bei einer Update-Synchronisierung nicht eingefügt. Aufgrund von Geschäftsänderungen werden die Daten einzelner Haushalte in dieser Tabelle nicht aktualisiert. Daher wird die Datenbereinigung der großen Tabelle durch eine Synchronisierung ohne Tabellensperren erreicht. Dies ist das Ende dieses Artikels über die Implementierung der Massenlöschung großer Datenmengen in MySQL-Tabellen. Weitere Informationen zur Massenlöschung großer Datenmengen in MySQL-Tabellen 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:
|
<<: Detaillierte Erläuterung der CSS-Bildspleißtechnologie (Sprite-Bild)
>>: So ändern Sie in Nginx die über http aufgerufene Website in https
CSS spielt auf einer Webseite eine sehr wichtige ...
Wie wird ein Textüberlauf angezeigt? Was sind Ihr...
Verwenden Sie HTML, um komplexe Tabellen zu erste...
Der Befehl tee wird hauptsächlich verwendet, um d...
Virtuelle Hosts verwenden spezielle Software- und...
Teil des Codes: Code kopieren Der Code lautet wie...
Es war schon immer sehr schwierig, Welleneffekte ...
Wie erreicht man Internationalisierung in React? ...
1. Herunterladen: http://www.oracle.com/technetwo...
Wir gehen davon aus, dass Sie ein linuxer sind, a...
Problembeschreibung Wie wir alle wissen, wird bei...
Allgemeine Lade-/Schreibmethoden Optionen manuell...
Vorwort Tatsächlich bin ich noch nie auf eine Sit...
1. Radiogruppierung Solange der Name gleich ist, h...