【发布时间】:2009-10-30 20:01:24
【问题描述】:
我的大型(>Mil 行)MySQL 数据库被重复项弄乱了。我认为它可能是填充它们的整个数据库的 1/4 到 1/2。
我需要快速摆脱它们(我的意思是查询执行时间)。
下面是它的外观:
id(索引)|文本1 |文本2 | 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 分钟)
有没有更快的方法来做到这一点?请帮我解决这个问题。
【问题讨论】:
-
请说明:a) 是否需要重新编号 id 字段? b) 我们期望重复的数量或比例是多少? (有助于决定就地工作或创建新表)c)当前表上存在哪些索引。
-
a) 不需要重新编号 id 字段 b) 我的估计:从 1/4 到 1/2 的 db 是重复的 c) id 是唯一的索引。我会相应地编辑问题。
标签: sql mysql duplicates