- 論壇徽章:
- 0
|
對(duì)于一個(gè)2000W的大表,一次走一個(gè)全表掃描確是很困難的。不過對(duì)于100W的表走一個(gè)全描掃也困難。
如果做這件事情又不想影響太大,就要分步來完成。
我給你一個(gè)思路你來參考一下。
首先衡量刪除操作有多大。
selet count(*) from table1 a ,table2 b where a.pid=b.pid;
如果都有索引的話,這個(gè)操作還是挺快的。
如果操作的操作大于原表的40%,那么很有必要重建這個(gè)表了。
重建表的方法:就是按條件提取數(shù)據(jù)到一個(gè)新表,最后改名完成。這是一種方案。
另一種 刪除方向。
上面通過比較覺的需要?jiǎng)h除的量不是太大時(shí),把需要?jiǎng)h除的PID生到到另一個(gè)臨時(shí)表中。
mysql DBname -e "select a.pid from table1 a ,table2 b where a.pid=b.pid">del_pid.txt;
sed -i '1d' del_pid.txt
awk '{print "delete from table1 where pid=",$1,";"}' del_pid.txt >del_pid.sql
mysql DBname<del_pid.sql
這樣把SQL拆成多個(gè)SQL執(zhí)行速度應(yīng)該不會(huì)太慢了。
如果還是感覺不行,那就只能分段操作了。 |
|