Whispere

Whispere

@Whispere

My BIO is empty. Try checking my profile later.

Jun 12, 2020

INSERT & chunk, proč je skript s chunk(100) rychlejší než s chunk(1000)

Whispere vytvoril tému INSERT & chunk, proč je skript s chunk(100) rychlejší než s chunk(1000)

Ahoj, mám aplikaci postavenou na Laravel 6.18.16 a řeším jedno zvláštní chování.

Mám skript:

       $array = [];
       for($i = 0; $i < 10000; $i++)
       {
           $array[] = [
             'parent_id' =>  1,
             'slot'         =>  1,
             'status'       =>  1,
             'inserted'     =>  1,
             'activity'     =>  'SLEEPING',
             'time'         =>  '00:00',
             'created_at'   =>  date('Y-m-d H:i:s'),
             'updated_at'   =>  date('Y-m-d H:i:s')
          ];
       }

foreach(array_chunk($array, 100) as $chunk) {
   Table::insert($chunk);
}

Pokud v array_chunk(), zvýším parametr na 2500, tak celý skript se provádí 4x pomaleji. Pokud to zvýším třeba na 5000, tak ještě výrazně více. Nejrychlejší je to paradoxně při vkládání bez rozdělování dat, tedy co řádek, to jeden insert. Blíží se mu jen hodnoty rozdělení po 70 až 100 řádcích/insert. Když se číslo zvýší, celkový běh skriptu také hodně naroste.

Dle logiky by to mělo být obráceně. Ví někdo čím by to mohlo být?