Heim > Datenbank > MySQL-Tutorial > Hauptteil

So löschen Sie schnell eine sehr große Tabelle in MySQL

王林
Freigeben: 2023-05-28 16:55:13
nach vorne
4233 Leute haben es durchsucht

MySQL Schnelles Löschen sehr großer Tabellen

Wenn Sie eine große Tabelle direkt in MySQL löschen, kann es dazu führen, dass MySQL hängen bleibt, was sich negativ auf Ihr Unternehmen auswirken kann. Voraussetzung für das Löschen einer sehr großen Tabelle ist, dass es sich bei der Tabelle um einen eigenständigen Tabellenbereich handelt, damit die Löschung wirksam ist.

Erstellen Sie einen festen Link zur Tabelle

# du -sh pay_bills.ibd 
175G        pay_bills.ibd
# 创建硬链接
# ln pay_bills.ibd pay_bills.ibd_hdlk
Nach dem Login kopieren

Löschen der Tabelle

Unter Linux verfügt jede Speicherdatei über einen Inode-Index, der auf die Datei verweist, und mehrere Dateinamen können über denselben Inode-Index auf dieselbe Speicherdatei verweisen.

Wenn der Inode-Index, auf den der Dateiname verweist, auch von anderen Dateinamen referenziert wird, wird nur die Referenz zwischen dem Dateinamen und dem Inode-Index gelöscht.

Wenn der Inode-Index, auf den der Dateiname verweist, nicht von einer anderen Datei referenziert wird Namen, entfernen Sie dann den Verweis zwischen dem Dateinamen und dem Inode-Index und löschen Sie die Speicherdatei, auf die der Inode-Index verweist.

Tatsächlich wird nur ein Dateiverweis auf pay_bills.ibd gelöscht. Unser pay_bills.ibd_hdlk-Verweis auf die physische Datei ist noch vorhanden, sodass kein Löschvorgang auf Betriebssystemebene durchgeführt wird und die E/A-Schwankung gering ist, was die Auswirkungen verringert auf MySQL.

mysql> drop table pay_bills;
Query OK, 0 rows affected (3.24 sec)
Nach dem Login kopieren

Dateilöschung ausführen

Truncate-Tool installieren

# yum install coreutils -y
Nach dem Login kopieren

Löschskript ausführen

#!/bin/bash
TRUNCATE=/usr/bin/truncate
# 从175G开始每次删除2G,最后如果脚本truncate后还剩下部分文件,使用rm删除
for i in `seq 175 -2 1`; do 
  $TRUNCATE -s ${i}G  pay_bills.ibd_hdlk
  sleep 1
done
rm -f pay_bills.ibd_hdlk
Nach dem Login kopieren

MySQL löscht schnell große Tabellendaten

Das Projekt wurde zum ersten Mal gestartet. Die für Leistungstests generierte Datenmenge war riesig, und es Es waren alles unbrauchbare Daten, aber einige müssen beibehalten werden. Oft ist es notwendig, die Daten systematisch zu bereinigen oder die nützlichen Daten herauszufiltern, bevor sie in die Tabelle eingefügt werden! Behalten Sie die Tabellenstruktur bei oder erstellen Sie die Tabelle neu (exportieren Sie die Tabellenstruktur in die Datenbank) und führen Sie die SQL-Anweisung erneut aus.

MySQL löscht oder löscht Tabellendaten

1. Löscht alle Daten, behält die Tabellenstruktur bei und kann die Wiederherstellung nicht rückgängig machen. Das Löschen von Zeilen ist extrem langsam.

3. Löschen Sie die Tabelle, Daten und Tabellenstruktur werden zusammen gelöscht.

5. Exportieren Sie alle Tabellenstrukturen der Datenbank, führen Sie sie erneut aus und löschen Sie alle Tabellen (Konsistent mit 4).

Tabellendatensyntax löschen Tabellenname;

aus Tabellenname löschen, wobei Spaltenname = „Wert“

DROP `t_product_events` IF EXIST;
CREATE TABLE `t_product_events` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '事件ID',
`level` int(11) NULL DEFAULT NULL,
`product_id` bigint(20) NOT NULL COMMENT '产品类型ID',
`identifier` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件名称',
`description` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '事件描述',
`type` int(11) NOT NULL COMMENT '事件类型,0:info(信息)、1:alert(告警)、2:error(故障)',
`ref_id` int(11) UNSIGNED NULL DEFAULT 0 COMMENT '引入模板时有意义',
`original_required` tinyint(2) NOT NULL,
`update_required` tinyint(2) NOT NULL DEFAULT 0 COMMENT '是否是标准功能的必选事件,0:可选,1:必选',
`custom` tinyint(2) NOT NULL COMMENT '0:模板导入,1:自定义',
`method` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件对应的方法名称(根据identifier生成)',
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
`ref` bigint(20) NULL DEFAULT NULL,
`related` int(11) NULL DEFAULT 0 COMMENT '被预发布或者已发布关联个数',
`copyright` tinyint(2) NULL DEFAULT 0 COMMENT '是否发布过, 1 发布过 0未发布',
`prerelease` tinyint(2) NULL DEFAULT 0 COMMENT '是否预发布过, 1 预发布过 0未预发布',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_product_id`(`product_id`) USING BTREE COMMENT '查询优化'
) ENGINE = InnoDB AUTO_INCREMENT = 497560 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '产品类型事件表' ROW_FORMAT = Compact;
Nach dem Login kopieren
ist

Das obige ist der detaillierte Inhalt vonSo löschen Sie schnell eine sehr große Tabelle in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!