MySQL:快速从海量数据库中删除重复项
遇到被重复条目破坏的大量 MySQL 数据库需要立即解决,特别是在时间紧迫的情况下是本质。出于对查询执行时间的担忧,这样一个包含超过一百万行的数据库充满了重复项,可能占用其存储容量的一半。
目的是快速清理数据库,识别唯一的“text1”和“text2”的组合,同时为每个唯一组合保留具有非空“text3”值的单个记录。此过程可防止数据丢失并确保数据完整性。
DISTINCT 和 GROUP BY 等传统方法虽然对较小的数据库有效,但已被证明是不够的,查询执行时间超过 20 分钟阈值。因此,我们正在寻找更高效的解决方案。
这样的解决方案利用“ON DUPLICATE KEY”和“IFNULL()”的综合力量,提供卓越的性能:
CREATE TABLE tmp LIKE yourtable; ALTER TABLE tmp ADD UNIQUE (text1, text2); INSERT INTO tmp SELECT * FROM yourtable ON DUPLICATE KEY UPDATE text3=IFNULL(text3, VALUES(text3)); RENAME TABLE yourtable TO deleteme, tmp TO yourtable; DROP TABLE deleteme;
这种方法的优点在于避免了 GROUP BY 和 DISTINCT 等资源密集型操作。它还绕过了与文件排序相关的性能缺陷,这是大型临时表的主要障碍。虽然对原始表的全面扫描仍然不可避免,但这种优化的解决方案为海量数据库提供了最有效的去重方法。
以上是如何快速删除海量MySQL数据库中的重复项?的详细内容。更多信息请关注PHP中文网其他相关文章!