¿Se inserta $this->db->insert_batch();
con 1 conexión de tabla o inserta cada fila por separado al incurrir en gastos generales de apertura de las conexiones?Rendimiento de inserción por lotes de Codeigniter
Respuesta
De la documentación del código de ignición insert_batch
hacer este tipo de cosas
$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')
Por lo que produciría sólo una consulta con todos los valores, normalmente de esta manera más rápida que hacen inserciones separadas.
Para responder a su pregunta: Utiliza una conexión.
En realidad, la respuesta @RageZ basada en el documento no siempre es correcta. Porque está totalmente basado en la cantidad de elementos que desea insertar. Al mirar codeigniter insert_batch()
código, puede ver que cortan inserciones de lote en 100 elementos.
// 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);
}
Esto significa que sus valores serán rebanada a 100s inserciones y si se quite la parte echo $sql
se puede ver de lo que parece a cuando se utiliza para la inserción por lotes 101 artículos. Por lo tanto, según sus preferencias de conexión, puede haber más de una conexión necesaria para insertar en db.
@ La respuesta de Ragez puede haber sido cierta cuando se hizo esta pregunta, creo que estaba usando CI 1.xx –
@amiawizard Eso puede ser correcto y la única forma de garantizarlo es mirar el código. Como sé, no han cambiado los documentos de esta parte de 1.x, pero es posible que el código haya cambiado de 1.x a 2.x – sobhan
@amiawizard Revisé 1.7.1 y 1.7.3 y no hay función de inserción_batch en ellos y parece que esta función se introdujo en la versión 2.x https://github.com/EllisLab/CodeIgniter/blob/develop/user_guide_src/source/changelog.rst – sobhan
- 1. Rendimiento de inserción por lotes JDBC
- 2. JDBC Manejo de excepción de inserción por lotes
- 3. Optimización del rendimiento de inserción masiva ...?
- 4. Rendimiento muy bajo para inserción por lotes con SQL Server CE 4.0 y Entity Framework 4.2
- 5. Rendimiento de inserción de base de datos
- 6. STL rendimiento del mapa de inserción: [] vs. inserción
- 7. consulta por lotes JDBC para un alto rendimiento
- 8. CodeIgniter activerecord, recuperar el último id de inserción?
- 9. Ajuste específico del rendimiento de inserción masiva de MySQL
- 10. ¿Cómo mejorar el rendimiento de inserción/actualización de datos?
- 11. ¿Extender Backbone.sync a la sincronización por lotes?
- 12. Codificación de archivo por lotes
- 13. Inserciones SQL por lotes en .NET
- 14. Incluir un archivo por lotes en un archivo por lotes
- 15. Por lotes de primavera tratando de crear repositorio de trabajo por lotes persistente de nuevo
- 16. ListSet pedido por inserción
- 17. Bucle script por lotes
- 18. actualización por lotes MySQL
- 19. Gráficos 3D por lotes
- 20. ¿Cómo puedo mejorar el rendimiento de una aplicación por lotes basada en MQ?
- 21. procesamiento por lotes conversiones de pandoc
- 22. 2 preguntas de cadena por lotes
- 23. archivo por lotes de Windows operador &&
- 24. Creación de trabajos por lotes en PowerShell
- 25. Windows script por lotes: cálculo de subcadena
- 26. Verificación ortográfica de código fuente por lotes
- 27. Esperando secuencias paralelas de proceso por lotes
- 28. CodeIgniter: ¿por qué usar xss_clean
- 29. por lotes, incluyendo los subdirectorios
- 30. actualización por lotes con Mangosta
La conexión de la base de datos debe ser siempre una, ya sea por lotes o no. – Usman