Производительность пакетной вставки Codeigniter - PullRequest
9 голосов
/ 26 декабря 2011

Вставляет ли $this->db->insert_batch(); соединение с 1 таблицей или вставляет каждую строку отдельно, что приводит к накладным расходам на открытие соединений?

Ответы [ 3 ]

11 голосов
/ 26 декабря 2011

Из документации по воспламенителю кода insert_batch делать такие вещи

$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')

Таким образом, он выдаст только один запрос со всеми значениями, обычно так быстрее, чем выполнение отдельных вставок.

6 голосов
/ 26 декабря 2011

Чтобы ответить на ваш вопрос: используется одно соединение.

1 голос
/ 13 февраля 2014

На самом деле ответ @RageZ, основанный на документе, не всегда корректен.Потому что это полностью зависит от количества элементов, которые вы хотите вставить.Глядя на код codeigniter insert_batch(), вы видите, что они нарезают пакетные вставки на 100 элементов.

// Batch this baby (Around line number 1077 in codeigniter 2.x)
for ($i = 0, $total = count($this->ar_set); $i < $total; $i = $i + 100)
{
    $sql = $this->_insert_batch($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_keys, array_slice($this->ar_set, $i, 100));

    //echo $sql;

    $this->query($sql);
}

Это означает, что ваши значения будут нарезаны на вставки по 100 с, и если вы раскомментируете часть echo $sqlВы можете увидеть, как это выглядит, когда вы используете пакет вставки для 101 элемента.Таким образом, в зависимости от ваших предпочтений в подключении, для добавления в базу данных может потребоваться более одного подключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...