日期:2014-05-17  浏览次数:20472 次

问个关于delete和transaction的问题
表A里面有几十w条数据
表B里面有几百w条数据
在同一个transaction里面要做下面几件事
1.delete from A; 删除表A所有数据
2.Load data; 往表B导入几q条数据
3.select * from B where exists(select * from A where A.id=B.id);

这样做是不是速度会很慢?
还是说1单独放在一个transaction里面,2和3在另一个transaction里面会比较快?


PS.操作1里面用delete,不用truncate

------解决方案--------------------
delete会全部记录入日志,所以会慢的。用truncate 吧
另外,短小的trans 当然最好,但如果考虑到业务需求的完整性,做在一个trans中比较常见。
执行的速度,并不受到trans的分割而影响(理论上),实际在建立trans的时候,还是多少有些消耗的,只是都在毫秒级感觉不出来而已。
------解决方案--------------------
PS.操作1里面用delete,不用truncate
--> 这样不如直接drop table再create table更快.