2014-02-05 8 views
0

любезно просвещенный меня, который работает быстрее/лучше или точно так же между CI batch insert и вставкой петли.mysql insert batch vs. insert loop (codeigniter)

$data = array(
      array(
       'title' => 'My title' , 
       'name' => 'My Name' , 
       'date' => 'My date' 
     ), 
      array(
      'title' => 'Another title' , 
      'name' => 'Another Name' , 
      'date' => 'Another date' 
     ) 
     ); 


партия вставки:

$this->db->insert_batch('mytable', $data); 

    /* produces: INSERT INTO mytable (title, name, date) 
      VALUES ('My title', 'My name', 'My date'), 
       ('Another title', 'Another name', 'Another date'); */ 


петля вставки (PHP):

for($i = 0; $ < count($data); $i++) 
{ 
    INSERT INTO mytable (title, name, date) 
    VALUES ($data[$i]['title'], $data[$i]['name'], $data[$i]['date']) 
} 

спасибо!

+1

Я бы порекомендовал пакетную вставку или вставку с транзакциями, где вы запустили все свои вставки перед тем, как приступить. – Zarathuztra

+4

Партия должна быть быстрее. Каждый вызов для вставки связан с служебными данными. Одна вставка со многими строками обычно быстрее. –

ответ

3

Пакетные вставки, как правило, быстрее, поскольку они обрабатывают данные за один раз, так как INSERT имеет некоторые накладные расходы (например, оптимизатор SQL не может вычесть определенные шаги). Тем не менее, вам нужно обработать огромное количество строк, чтобы создать заметную разницу.

Если вам интересно, если это имеет значение в любом случае, то не забудьте также измерить время, затрачиваемое каркасом на сопоставление классов с таблицей (ами) базы данных. Есть хороший шанс, что ORM потребляет больше ресурсов, чем циклический SQL INSERT.