我有一个表需要删除,该表大约占用了130GB。当我开始删除/清空该表时,mysql服务器会变得缓慢,并且我会遇到很多与正在使用该服务的用户有关的问题。
如何在不影响mysql性能的情况下删除大表?
我已经尝试创建一个新表来代替要删除的表,然后将其重命名并删除未使用的表(旧表),但是重命名命令会挂起我的mysql服务。
我正在使用:
mysql Ver 15.1 Distrib 10.1.28-MariaDB, for Linux (x86_64) using readline 5.1
我有一个表需要删除,该表大约占用了130GB。当我开始删除/清空该表时,mysql服务器会变得缓慢,并且我会遇到很多与正在使用该服务的用户有关的问题。
如何在不影响mysql性能的情况下删除大表?
我已经尝试创建一个新表来代替要删除的表,然后将其重命名并删除未使用的表(旧表),但是重命名命令会挂起我的mysql服务。
我正在使用:
mysql Ver 15.1 Distrib 10.1.28-MariaDB, for Linux (x86_64) using readline 5.1
清空大型表的最快方法是创建一个具有相同列的新表。与仅删除相比,截断会慢得多。
禁用外键检查
SET foreign_key_checks = 0;
将旧表重命名为要删除的表
RENAME TABLE old TO temp;
创建与旧表完全相同的新空表
CREATE TABLE new LIKE old;
删除旧表
DROP TABLE temp
启用外键检查
SET foreign_key_checks = 1;
CREATE TABLE new LIKE old;
。 - Rick James