开发者社区> 问答> 正文

MySQL删除重复记录的方案? 400 请求报错 

这么久了,话说第一次提问。
怎么样才能更快的删除重复数据,以下我是已经采取过的方案。

5W多条记录  删除重复记录,保留ID最小的行。

delete from table
	where peopleId in 
		(select peopleId from table group by peopleId having count(peopleId) > 1)   
	and id not in 
		(select min(id) from table group by peopleId having count(peopleId)>1)
出错:
MariaDB>1093 - You can't specify target table 'table' for update in FROM clause
google> mysql 一个较特殊的问题:You can't specify target table 'wms_cabinet_form' for update in FROM clause - 老湖 - 博客园 不能先select出同一表中的某些值, 再update这个表(在同一语句中), 于是,使用子集。
delete from table
	where peopleId in 
		(select peopleId from (select tmp.* from table tmp) a group by peopleId having count(a.peopleId) > 1)   
	and id not in 
		(select min(id) from (select tmp.* from table tmp) b group by peopleId having count(b.peopleId)>1)
运行几十秒后都没结果,没等结果出来,开始优化 子集只需要需要的列
delete from table
	where peopleId in 
		(select peopleId from (select tmp.id, from table tmp) a group by peopleId having count(a.peopleId) > 1)   
	and id not in 
		(select min(id) from (select tmp.id,tmp.peopleId from table tmp) b group by peopleId having count(b.peopleId)>1)
30分钟无结果 再次google>mysql表删除重复记录方法总结及效率对比
总结:  第一种方法历史22分钟,系统负载5左右; 第二种方法效率非常低下,把未知索引文件破坏,终止执行 第三种方法历时17分钟,其中 insertinto tmp_ids selectmin(id),name from test groupby name havingcount(*)>1orderbynull 历时15分钟,删除动作历时2分钟,系统负载3左右 第四种方法,执行过程中,把它test的索引文件都破坏了,可见“威力”之大;
好像都比较慢,于是我惆怅了。。 当初没设该列为unique就是个错误。。。。

展开
收起
kun坤 2020-05-30 23:03:33 596 0
1 条回答
写回答
取消 提交回答
  • 我练习过一个类似的例子。直接说下几步关键的,你可以用这种方法对你的数据试验下(根据people表的pid判重,保留多条重复记录中pid最小的记录):
    A、创建临时表存储有重复的记录的pid

    CREATE TEMPORARY TABLE SELECT pid FROM people GROUP BY pid HAVING COUNT(pid) > 1;
    B、创建一个临时表存储重复列组中值_rowid最小的列的_rowid:
    CREATE TEMPORARY TABLE t2 SELECT MIN(_rowid) AS rowid FROM people GROUP BY pid HAVING COUNT(pid) > 1;
    C、删除重复记录
    DELETE FROM people WHERE pid IN (SELECT pid FROM t1) AND _rowid NOT IN (SELECT rowid FROM t2);
    ######很强大啊,秒出结果,之前复制子集太慢了。2了######A、B两步或许可以合成一步,只创建一个临时表,至于快不快,你自己试验下######mysql没有rownumber over分析函数?######常规办法在mysql这坨屎上是不管用的!
    2020-05-30 23:03:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像