Maison > Article > base de données > Comment supprimer rapidement une très grande table dans MySQL
Si vous supprimez une grande table directement dans MySQL, cela peut provoquer le blocage de MySQL, ce qui peut avoir un impact négatif sur votre entreprise. La condition préalable à la suppression d'une très grande table est que la table soit un espace table indépendant, afin que la suppression soit effective.
# du -sh pay_bills.ibd 175G pay_bills.ibd # 创建硬链接 # ln pay_bills.ibd pay_bills.ibd_hdlk
Sous Linux, chaque fichier de stockage aura un index Inode pointant vers le fichier, plusieurs les noms de fichiers peuvent pointer vers le même fichier de stockage via le même index Inode.
Si l'index Inode référencé par le nom de fichier est également référencé par d'autres noms de fichiers, seule la référence entre le nom de fichier et l'index Inode sera supprimée
Si le fichier références de nom Si l'index Inode n'est pas référencé par d'autres noms de fichiers, supprimez la référence entre le nom de fichier et l'index Inode et supprimez le fichier de stockage pointé par l'index Inode.
En fait, il supprime uniquement une référence de fichier à pay_bills.ibd. Notre référence pay_bills.ibd_hdlk au fichier physique existe toujours, donc aucune opération de suppression au niveau du système d'exploitation ne sera effectuée et la fluctuation des E/S sera effectuée. ne soit pas important. Réduisez l'impact sur MySQL.
mysql> drop table pay_bills; Query OK, 0 rows affected (3.24 sec)
Installer l'outil de troncature
# yum install coreutils -y
Exécuter le script de suppression
#!/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
Lorsque le projet est lancé pour la première fois, une énorme quantité de données est générée pour les tests de performances. Ce sont toutes des données inutilisables, mais certaines d'entre elles doivent être conservées dans de nombreux cas. pour nettoyer systématiquement les données ou pour que les données utiles soient filtrées puis insérées dans le tableau ! Conservez la structure de la table ou reconstruisez la table (exportez la structure de la table dans la base de données) et réexécutez l'instruction SQL.
MySQL supprimer ou effacer les données d'une table
1, tronquer– les données conservent la structure de la table et ne peuvent pas être annulées et restaurées
2 La suppression est une suppression ligne par ligne qui est extrêmement lente et ne convient pas à la suppression de grandes quantités de données
#. 🎜🎜#3. déposez et supprimez la table. Supprimez les données et la structure de la table ensemble 4. Exportez la structure de la table et exécutez-la à nouveau ; structures de la base de données et exécutez-la à nouveau pour effacer toutes les tables (avec 4 cohérentes)Effacer la syntaxe des données de la table# 🎜🎜#supprimer du nom de la table ;supprimer du nom de la table où nom de la colonne="valeur " ;
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;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!