[求助] 千万级的表怎么去重复?
一直都是在折腾万级别的小小数据库,不知道索引、数据类型等的不同会对效率有多大影响。最近不是密码 泄露吗?就下了个,导入mysql数据库,共两千多万条记录,只留密码字段,其他字段全部删除,进行select、insert等测试,有了索引select的效率明显不同,但在去重复时遇到难题。
方法一:
CREATE TABLE newtable SELECT DISTINCT pwd FROM oldtable
这种方式看起来效率最高,但运行时直接把机器拖死,内存一会儿就用完了。
方法二:
逐条获取再删除重复(每次提取$num条记录,我的$num=50)
$result = mysql_query("SELECT MIN(id), pwd FROM tablename WHERE id BETWEEN $id AND $num GROUP BY pwd");
while($row = mysql_fetch_row($result)){
mysql_query("DELETE FROM tablename WHERE id>$row[0] AND pwd='$row[1]'");
}
$id += $num;
再通过地址栏或cookie等传递$id,效率太低,处理了100分钟,才删除了30多万条重复
请问我应该怎么做,效率才会更高?谢谢
[解决办法]
另建一表,创建主键,然后直接 insert into 另建一表 select * from oldtable
[解决办法]
先拷贝表,然后删除字段,这样快,而且不占内存。
[解决办法]
先用定制的select <> group by pwd INTO <outfile>
然后再load data into <newtable>呢
只要前边的select能保证速度,那么应该可行。
[解决办法]