需求
A表中有70万数据,B表中有50万数据。
现在要实现:
将B表导入A表。
A、B两个表中有一些重复数据,比如A表中有name='张三'这个字段,B表中也有name='张三'这个字段,则两个保留一个。若B表中有,A表中没有,则往A表中添加。
我的实现
while(B表中查出的数据不为空){
//查询出B表中的数据
//每次查询1000条B表中的数据,循环查询直到查询为空
$data = selectFromB(1000);
$needInsert = []; //需要添加的数组
for($data as $key=>$value){
//判断该数据在A表中是否存在
$existInA = isExistInA($value['name']);
if($existInA == 0){ //在A表中不存在,则添加
array_push($needInsert,$value);
}
}
//将本次处理得到的需要添加的数据批量添加到A表
batInsertToA($needInsert);
}
遇到的问题
中间那一步isExistInA(判断该数据在A表中是否存在)太耗时,每循环一遍都要去查一次库,导致将A、B整合完成都需要半个小时的时间。
请问这种问题如何优化?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…