En mi aplicación hago inserciones de varias filas cuando puedo solo porque reduce la cantidad de viajes de ida y vuelta entre el db y la aplicación.
Sin embargo, tenía curiosidad, ¿hay alguna otra ventaja? Por ejemplo, si se insertan varias filas a la vez de esta manera:
insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
versus:
insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
y la tabla tiene un índice, ¿se calcula el índice una vez en el primer caso y dos veces en el segundo? ¿O es siempre una vez por inserto? Suponga que ambas consultas están en la misma transacción.
Estoy usando PostgreSQL.
postgresql
index
optimization
cdmckay
fuente
fuente
Respuestas:
Creo que @a_horse_with_no_name tiene razón acerca de que el índice se actualiza una vez por declaración, porque si la declaración no ha completado su ejecución, los datos no serán visibles ya que está en la transacción. Y la definición de una declaración incluye tener múltiples valores
Y de acuerdo con los documentos aquí, la creación / actualización del índice funciona más eficientemente con lotes que con declaraciones individuales.
También hay un buen artículo de Peter Manis sobre el rendimiento de varios métodos de inserción que puedo recomendar.
Otra cosa a tener en cuenta es la
FILLFACTOR
del índice, ya que tiene un impacto en el rendimiento como lo describe Fabien Coelho aquí .fuente
No creo que actualmente haya diferencias de optimización en el área de mantenimiento de índices a este respecto.
Además de sobrecarga de la red, las otras ventajas de la declaración de valores múltiples son en el análisis sintáctico, bloqueo, etc. (A pesar de que el bloqueo de tabla en
tbl
la toma el primero instrucción de inserción y después se mantuvo durante el resto de la transacción, cada inserto la declaración aún tiene que verificar que el bloqueo esté retenido, y esta verificación no es gratuita)fuente