2011-12-26 8 views
8

Czy wstawia się $this->db->insert_batch(); z 1 połączeniem stołowym, czy też wstawia każdy rząd osobno ponosząc koszty połączeń otwierania?Wydajność wsadowego wsadu kodowania

+0

Połączenie z bazą danych powinno być zawsze jedno, bez względu na to, czy jest to partia, czy nie. – Usman

Odpowiedz

11

Z dokumentacji codeigniter insert_batch zrobić tego rodzaju rzeczy

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

Tak byłoby produkować tylko jedno zapytanie ze wszystkimi wartościami, zwykle w ten sposób szybciej niż robi osobne wkładki.

6

Aby odpowiedzieć na pytanie: Używa jednego połączenia.

1

Właściwie odpowiedź @RageZ na podstawie dokumentu nie zawsze jest poprawna. Ponieważ jest całkowicie oparty na liczbie elementów, które chcesz wstawić. Patrząc na kod codeigniter insert_batch() widać, że segmentują wsadowe inserty na 100 pozycji.

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

Oznacza to, że wartości będą plaster do 100s wkładkami i jeśli odkomentuj echo $sql część można zobaczyć, co to wyglądać, gdy używasz wkładki partię do 101 pozycji. Tak więc w zależności od preferencji połączenia może istnieć więcej niż jedno połączenie potrzebne do wstawienia w db.

+0

@ Odpowiedź Rageza mogła być prawdziwa, gdy zadawano to pytanie, myślę, że używałam CI 1.xx –

+0

@amiawizard To może być słuszne i jedynym sposobem na zapewnienie jest spojrzenie na kod. Jak wiem, nie zmienili dokumentów tej części z 1.x, ale możliwe, że kod zmienił się z 1.x na 2.x – sobhan

+0

@amiawizard Sprawdziłem 1.7.1 i 1.7.3 i nie ma funkcji insert_batch w i wydaje się, że ta funkcja została wprowadzona w wersji 2.x https://github.com/EllisLab/CodeIgniter/blob/develop/user_guide_src/source/changelog.rst – sobhan

Powiązane problemy