簡體   English   中英

Laravel從數據庫表到另一個表的1mill行,速度很慢

[英]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.organisasjonsnummerphones.businessCode列,但它會占用大量的時間,現在對其進行索引一樣,所以我不知道是否有索引他們任何好處,如果現在他們以后不會使用。 無論如何,至少在某種程度上,使用單個查詢應該更快。

永遠記住,當您在循環中使用Eloquent / SQL時,將在每個回合中運行一個命令。 延遲加載也是如此。

在這種情況下,您應該使用\\DB::statement("put your sql here"); 或在這種情況下\\DB::update("put your update here"); ,讓數據庫為您服務並開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM