2011-12-26 15 views
8

L'inserto $this->db->insert_batch(); viene inserito con una connessione a una tabella oppure inserisce ciascuna riga separatamente durante l'overhead delle connessioni di apertura?Codeigniter prestazioni inserto lotto

+0

La connessione al database deve essere sempre una, sia batch che non. – Usman

risposta

11

Dalla documentazione di codeigniter insert_batch fare questo tipo di cose

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

Quindi sarebbe solo produrre una query con tutti i valori, normalmente in questo modo più veloce quindi fare inserti separati.

6

Per rispondere alla tua domanda: utilizza una connessione.

1

In realtà la risposta @RageZ basata sul documento non è sempre corretta. Perché è totalmente basato sul numero di elementi che vuoi inserire. Quando si guarda il codice codeigniter insert_batch(), si può notare che tagliano gli inserimenti batch in 100 elementi.

// 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); 
} 

significa che i valori saranno fetta di inserti 100s e se si tolgono i commenti alla parte echo $sql si può vedere che cosa è simile a quando si utilizza inserto in batch per 101 articoli. Pertanto, in base alle preferenze di connessione, è possibile che sia necessaria più di una connessione per l'inserimento in db.

+0

@ La risposta di Ragez potrebbe essere stata vera quando è stata posta questa domanda, penso che stavo usando CI 1.xx –

+0

@amiawizard Questo può essere giusto e l'unico modo per assicurarsi è di guardare il codice. Come so che non hanno cambiato i documenti di questa parte da 1.x ma è possibile che il codice sia cambiato da 1.x a 2.x – sobhan

+0

@amiawizard Ho controllato 1.7.1 e 1.7.3 e non c'è alcuna funzione insert_batch in loro e sembra che questa funzione sia stata introdotta nella versione 2.x https://github.com/EllisLab/CodeIgniter/blob/develop/user_guide_src/source/changelog.rst – sobhan