我有一个巨大的mysql 2表,每个表包含超过100万个数据。目前,我必须将一些表中的某些列合并到另一个表中,然后有条件地更新第一个表。
这是一个示例代码,向您展示我的意思
目前我正在使用Laravel 4.1来执行查询。并以块的形式更新数据。不幸的是,如果我尝试在此方法中更新超过20个条目,则服务器崩溃。
$records = Record::where('MINE_ID','!=','1')->skip($skip)->take($take)->get();
//Equivalent to "SELECT * FROM records LIMIT 20 OFFSET 20"
foreach ($records as $record) {
$id = $record->room_id;
$lat = $record->lat;
$lng = $record->lng;
$update = DB::table('accidents')
->where('room_number', $id)
->update(array(
'LATITUDE' => $lat,
'LONGITUDE' => $lng
));
}
MySQL表引擎是innoDB。有没有更快更容易的方法呢?
非常感谢任何帮助。
其他信息 我已经为所有表添加了索引。我听说删除索引有帮助吗?而且,他们是BIGINT。它会影响性能吗?
答案 0 :(得分:1)
您可能需要考虑首先将完整数据作为临时表加载到表中,然后删除原始数据,将临时表重命名为原始表的名称。它应该更容易。