2011-12-26 33 views
8

$this->db->insert_batch(); chèn với 1 kết nối bảng hay nó chèn mỗi hàng riêng biệt phát sinh chi phí của các kết nối mở?Hiệu suất chèn hàng loạt Codeigniter

+0

Kết nối cơ sở dữ liệu phải luôn là một, cho dù hàng loạt hay không. – Usman

Trả lời

11

Từ các tài liệu mã igniter insert_batch làm điều này loại điều

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

Vì vậy, nó sẽ tạo ra chỉ có một truy vấn với tất cả các giá trị, thông thường theo cách này nhanh hơn sau đó làm chèn riêng biệt.

6

Để trả lời câu hỏi của bạn: Nó sử dụng một kết nối.

1

Thực tế câu trả lời @RageZ dựa trên tài liệu không phải lúc nào cũng chính xác. Bởi vì nó hoàn toàn dựa trên số lượng các mục bạn muốn chèn. Khi nhìn vào mã code1iter, bạn có thể thấy rằng họ cắt hàng loạt chèn vào 100 mục.

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

Nó có nghĩa là giá trị của bạn sẽ được lát đến 100s chèn và nếu bạn bỏ ghi chú phần echo $sql bạn có thể xem những gì nó trông giống như khi bạn sử dụng chèn hàng loạt cho 101 mặt hàng. Vì vậy, dựa trên sở thích kết nối của bạn, có thể có nhiều hơn một kết nối cần thiết để chèn vào db.

+0

@ Câu trả lời của Ragez có thể đúng khi câu hỏi này được hỏi, tôi nghĩ rằng tôi đang sử dụng CI 1.xx –

+0

@amiawizard Điều đó có thể đúng và cách duy nhất để đảm bảo là xem mã. Như tôi biết họ đã không thay đổi tài liệu của phần này từ 1.x nhưng có thể mã đã thay đổi từ 1.x thành 2.x – sobhan

+0

@amiawizard tôi đã kiểm tra 1.7.1 và 1.7.3 và không có hàm insert_batch nào trong và dường như chức năng này được giới thiệu trong phiên bản 2.x https://github.com/EllisLab/CodeIgniter/blob/develop/user_guide_src/source/changelog.rst – sobhan

Các vấn đề liên quan