$this->db->insert_batch();
是否插入1个表连接,还是插入每行分开招致打开连接开销?Codeigniter批量插入性能
回答
从代码点火器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')
因此,这将产生唯一一个所有值的查询,通常这种方式更快然后做单独的刀片。
要回答你的问题:它使用一个连接。
其实@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);
}
这意味着,你的价值观将切片100S插入,如果你取消注释echo $sql
部分你可以看到它的外观,当您使用插入批次101个项目等。因此,根据您的连接首选项,可能会有多个连接需要在db中插入。
@ Ragez的答案可能是真实的,当问这个问题时,我想我使用的是CI 1.xx – 2014-02-14 11:28:13
@amiawizard这可以是正确的,唯一的方法是确保看代码。据我所知他们没有改变这部分文件从1.x,但它可能代码已经从1.x更改为2.x – sobhan 2014-02-14 18:58:09
@amiawizard我检查了1.7.1和1.7.3,并没有insert_batch函数他们似乎在2.x版中引入了这个函数https://github.com/EllisLab/CodeIgniter/blob/develop/user_guide_src/source/changelog.rst – sobhan 2014-02-14 20:56:48
- 1. MongoDB批量插入性能
- 2. JDBC批量插入性能
- 3. Codeigniter批量插入查询
- 4. MongoDB巨大的批量插入性能
- 5. 批量插入预期性能
- 6. 增加批量插入的JDBC性能
- 7. 批量大小如何影响批量插入性能?
- 8. 什么是最好的性能批量插入或切片多批次插入?
- 9. 批量/批量插入R
- 10. 批量插入
- 11. 批量插入
- 12. Apache Tomcat JDBC连接池在批量\批量插入时性能不佳
- 13. 批量插入不起作用属性
- 14. Bigtable批量插入
- 15. HQL批量插入
- 16. Sql批量插入
- 17. Laravel批量插入
- 18. kohana批量插入
- 19. 批量插入Cassandra
- 20. Grails批量插入
- 21. 批量插入行
- 22. SQLite3:批量插入?
- 23. 批量插入表
- 24. 批量SQL插入
- 25. oracle批量插入
- 26. VB.net批量插入
- 27. Scrapy批量插入
- 28. mysql批量插入
- 29. SubSonic批量插入
- 30. MySQL批量插入
数据库连接应始终为1,无论是否为批处理。 – Usman 2011-12-26 14:01:18