[英]Laravel from database table to another table 1mill rows, slow
所以基本上,我有2張桌子。 第一個表包含一百萬行或其他內容,帶有一個稱為“ telefon”的空字段。
現在,我得到了第二個表,該表在另一個表中具有“ telefon”的字段值。
我想出了這個解決方案,但這需要永遠。 已經一個小時了,檢查數據庫表時,只完成了1600行。 有沒有更快的方法呢? 提前致謝。
DB::table('phones') -> orderBy('id') -> chunk(100, function($old) {
foreach ($old as $x) {
DB::table('companies')
-> where('organisasjonsnummer', $x -> businessCode)
-> update([
'telefon' => $x -> contact
]);
}
});
呵呵,foreach +查詢幾乎總是不好的。 如果我沒記錯的話,您想這樣做:
UPDATE companies, phones SET companies.telefon = phones.contact WHERE companies.organisasjonsnummer = phones.businessCode
它可能會非常緩慢,如果有上沒有索引companies.organisasjonsnummer
和phones.businessCode
列,但它會占用大量的時間,現在對其進行索引一樣,所以我不知道是否有索引他們任何好處,如果現在他們以后不會使用。 無論如何,至少在某種程度上,使用單個查詢應該更快。
永遠記住,當您在循環中使用Eloquent / SQL時,將在每個回合中運行一個命令。 延遲加載也是如此。
在這種情況下,您應該使用\\DB::statement("put your sql here");
或在這種情況下\\DB::update("put your update here");
,讓數據庫為您服務並開心!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.