2014-03-04 92 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

您可能需要考慮先將全部數據加載到表中作爲臨時表,然後刪除原始表,然後將臨時表重命名爲原始表的名稱。它應該更容易。

相關問題