当前位置: 首页 > 面试题库 >

MySQL快速从大型数据库中删除重复项

柏麒
2023-03-14
问题内容

我有大的(>百万行)MySQL数据库被重复弄乱了。我认为这可能是充满它们的整个数据库的1/4到1/2。我需要快速摆脱它们(我是指查询执行时间)。外观如下:
id(索引)| text1 | text2 | text3
text1&text2组合应该是唯一的,如果有重复项,则仅应保留一个text3 NOT NULL组合。例:

1 | abc | def | NULL  
2 | abc | def | ghi  
3 | abc | def | jkl  
4 | aaa | bbb | NULL  
5 | aaa | bbb | NULL

…成为:

1 | abc | def | ghi   #(doesn't realy matter id:2 or id:3 survives)   
2 | aaa | bbb | NULL  #(if there's no NOT NULL text3, NULL will do)

新的id可以是任何东西,它们不依赖于旧表的id。
我已经尝试过类似的事情:

CREATE TABLE tmp SELECT text1, text2, text3
FROM my_tbl;
GROUP BY text1, text2;
DROP TABLE my_tbl;
ALTER TABLE tmp RENAME TO my_tbl;

或SELECT DISTINCT和其他变体。
当它们在小型数据库上工作时,我的查询执行时间非常长(实际上从未到尽头;> 20分钟)

有什么更快的方法吗?请帮我解决这个问题。


问题答案:

我相信使用重复键+ 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;

应该比任何需要分组依据或不重复或子查询甚至排序依据的速度都要快得多。这甚至不需要文件排序,这将破坏大型临时表的性能。仍然需要对原始表进行全面扫描,但这是不可避免的。



 类似资料:
  • 本文向大家介绍高效快速地删除 mysql 重复数据,包括了高效快速地删除 mysql 重复数据的使用技巧和注意事项,需要的朋友参考一下 MYSQL数据库中单表有几百万数据,使用几种delete方法删除重复的数据耗时比较长,运行语句,半天出不来,甚至出现服务器内部错误。 mysql 给表添加唯一索引 完成重复记录删除 不希望数据表中有重复记录的时候我们可以给表添加一个联合唯一索引 例如,user表中

  • 问题内容: 我有一张桌子,上面有一些ID +标题。我想使title列唯一,但是它已经有60万条记录,其中有些是重复的(有时是几十次)。 如何删除除一个以外的所有重复项,以便之后可以向标题栏添加一个唯一键? 问题答案: 此命令添加唯一键,并删除所有会产生错误的行(由于唯一键)。这将删除重复项。 编辑:请注意,对于某些版本的MySQL ,此命令可能不适用于InnoDB表。解决方法请参阅此帖子。(感谢“

  • 问题内容: 我有一个关于MySql的问题。我有一个带有7.479.194记录的表。有些记录是重复的。我想这样做: 所以我会取出重复的条目…但是问题是这是大量数据。该表是MyIsam。 这是示例数据-我想按城市,short_ccode进行分组… 我想我必须为my.ini文件修改一些内存,以便按语句分组……哪些设置对此负责? 我有一台具有3bg RAM和2Ghz处理器的机器。 我的ini文件: 问题答

  • 问题内容: 我需要从数据库中删除重复的行。我可以用简单的SQL查询吗?如果没有,请告诉我一些快速算法。 例子: 我需要删除ID为2的行(或3,无论如何,它们是相等的,但不能同时都是)。谢谢你的帮助 问题答案: 正如评论中指出的那样,如果连续出现三遍,则此操作将无效。您可以重复运行此(繁重的)查询,直到停止删除内容为止,或者等待更好的答案…

  • 本文向大家介绍Mysql删除重复的数据 Mysql数据去重复,包括了Mysql删除重复的数据 Mysql数据去重复的使用技巧和注意事项,需要的朋友参考一下 MySQL数据库中查询重复数据 select * from employee group by emp_name having count (*)>1; Mysql  查询可以删除的重复数据 select t1.* from employee

  • 问题内容: 有没有一种有效的方法使用python从此数据中删除重复的“ person_id”字段?在这种情况下,只需保持第一次出现。 应成为: 问题答案: 假设您的JSON是有效语法,并且您确实在请求帮助,因为您将需要执行以下操作 如果要始终保留第一次出现,则需要执行以下操作