我继承了一个数据库,并希望对其进行清理和加速。我有一个包含 30,000,000 行的表,其中许多是由于我们程序员的错误而插入的垃圾数据。在添加任何新的、更优化的索引之前,我将表从 MyISAM 转换为 InnoDB,并希望删除大量包含垃圾数据的行。
数据库是 MySQL 5.0,我有服务器的 root 访问权限。我首先通过 Adminer 运行这些命令,然后通过 phpMyAdmin 运行,结果相同。
我正在运行的命令是,
DELETE
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)
本质上,删除此列中以 dash 开头的任何内容-。
它运行了大约 3-5 分钟,然后当我查看进程列表时,它消失了。
然后我跑,
SELECT *
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)
它返回数百万行。
为什么我的删除语句没有完成?
PS,我知道 MySQL 5.0 已经过时了。我正在将数据库移动到 MySQL 5.6 w InnoDB(可能是 MariaDB 10 w XtraDB),但在此之前,我希望按原样使用 DB 来回答这个问题。
——
编辑已删除,请参阅我的答案。