上次发表过的一遍删除重复记录的文章,其中最优的方案三删除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)
[root@localhost test]# ls
?????.txt[root@localhost test]# ls -lih
total 4.0K
1061229 -rw-r--r--. 1 root root 104 Jul 24 20:16 ?????.txt
[root@localhost test]# find . -inum 1061229 -exec rm {} -rf \;
[root@localhost test]# ls -l
total 0