2014-03-04 143 views
0

我有一个巨大的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。它会影响性能吗?

+1

处理大型数据集时,通常最好使用原始SQL查询。 – GordonM

+0

谢谢戈登先生......我更关心这种方法。我粘贴的代码工作..但我正在寻找一个直接查询,而不需要Apache服务器或PHP。任何帮助非常感谢.. – tintinboss

+2

没有任何信息(包括代码)是非常有用的。这是一个数据库问题,而不是php或laravel问题。从你的描述来看,你似乎可以用一两个查询来完成所有这些工作,这将会非常快速。你能否描述所涉及的表格,并确切地告诉你要用他们做什么? – Okonomiyaki3000

回答

1

您可能需要考虑先将全部数据加载到表中作为临时表,然后删除原始表,然后将临时表重命名为原始表的名称。它应该更容易。

相关问题