我有一个MySQL数据库,数据量很大(>百万行),里面有很多重复的数据。整个数据库中可能有四分之一到一半的数据都是重复的。
我需要快速处理它们(也就是查询执行时间要快)。
下面是数据库表格的样式:
id(索引)| text1 | text2 | text3
text1和text2的组合应该是唯一的,如果有任何重复的组合,只保留一个text3不为空的组合。例如:
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分钟)。
有没有更快的方法呢?请帮助我解决这个问题。