160802、1.06s删除10w条重复记录只保留一条(mysql)及linux删除乱码文件

上次发表过的一遍删除重复记录的文章,其中最优的方案三删除1w条也花了0.07秒而2w条就已经花掉了4秒。今天进行了进一步优化,测试删除10w条只花了1.06秒。速度提升了很多。

建表语句

CREATE TABLE `test_user` (

`id` INT(10) NOT NULL DEFAULT ‘0‘,

`namea` VARCHAR(40) NOT NULL,

`nameb` VARCHAR(40) NOT NULL,

`user_id` VARCHAR(40) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8 ;

新方案:(其中user_id是重复字段,保留一条)

DELETE FROM test_user WHERE id NOT IN (SELECT id FROM (SELECT MAX(id) AS id FROM test_user GROUP BY user_id) X);

10000条删除9990    20000条删除19990      100000条删除199990
0.062sec           0.018sec                                 1.060sec

另外总结了一条删除linux乱码文件的方法:(其中红色部分就为inode(index node) ,-i选项用于显示inode)
[[email protected] test]# ls
?????.txt[[email protected] test]#  ls -lih
total 4.0K
1061229 -rw-r--r--. 1 root root 104 Jul 24 20:16 ?????.txt

[[email protected] test]# find . -inum 1061229 -exec rm {} -rf \;

[[email protected] test]# ls -l
total 0

时间: 2024-12-13 07:35:48

160802、1.06s删除10w条重复记录只保留一条(mysql)及linux删除乱码文件的相关文章

【转】SQL删除重复记录,只保留其中一条

SQL:删除重复数据,只保留一条用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(p

如何删除表中的重复记录只保留其中一条?

1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people  where peopleId  

MySQL删除重复记录只保留一条

删除表中重复记录,只保留一条: delete from 表名 where 字段ID in (select * from (select max(字段ID) from 表名 group by 重复的字段 having count(重复的字段) > 1) as b); 实例:2.当想要为某一个表建立一个唯一索引,由于表中有重复记录而无法进行时,需要删除重复记录.例表 dept id_no id_name 100 'AAA' 101 'BBB' 102 'CCC' 103 'DDD' 100 'EEE

SQL 删除表中重复记录只剩一条

今天不小心插入数据时插入重复了 这表中没有任何主键外键,随便插入或删除 网上查了很多复杂的语句都没有解决问题 最后用delete top (1) 解决问题 delete top (1) from Persion where name = 'xiaomin' 也可以用 update top (1) from person where name ='xxxx' delete from person where name = 'xxxx' 没那么复杂

oracle 删除掉重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有

SQL删除重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有r

MySQL中删除重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT * FROM people WHERE peopleId IN ( SELECT peopleId FROM people GROUP BY peopleId HAVINGcount(peopleId) > 1 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3

Oralce中SQL删除重复数据只保留一条(转)

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有

PHP mysql 删除表中所有数据只保留一条

DELETE FROM `logs` WHERE wangzhi='www.juhutang.com' and id<>101072; 上面这段代码的意思为 删除表logs中 所有字段wangzhi含内容为www.juhutang.com的数据.但是不删除同表中 id 是101072 的这条数据. 当然了 我是新手,这条语句可能与标题不是那么完善, 希望大牛解答,删除表中所有数据,保留最近的一条 或者说只保留主键ID最大的一条. 这语句如何写. PHP mysql 删除表中所有数据只保留一条