Ver Mensaje Individual
  #12 (permalink)  
Antiguo 04/07/2010, 15:24
enridp
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 5 meses
Puntos: 11
Respuesta: Insertar en tablas relacionadas N:M (maxima performance)

Es que justamente eso es lo que no se :(
Por eso comentaba que creo hace falta eso en Internet, o al menos las fuentes oficiales deberian tener consejos o "best practices" para diferentes casos.

Yo no tengo la experiencia como para poder decidir con seguridad que me conviene más.

Por ejemplo no sabía que al empezar una transacción se bloqueaban las tablas, estas seguro esto es asi? o tal vez te entendí mal. Porque de hecho una de las mayores ventajas de InnoDB frente a MyISAM es precisamente que no bloquea las tablas solo la fila que está modificando.
Y al ser una transacción supuse que ni eso bloquearía ya que no se hace ninguna modificacion hasta que no se termine. Pero de nuevo, estoy leyendo el tema asique ya ni se si estoy en lo correcto.

Buscando un poco más encontre esto:
Cita:
A secondary benefit of using transactions is speed. There is often an overhead associated with actually committing the data to the database. If you've got 1000 rows to insert, committing after every row can cause quite a performance hit compared to committing once after all the inserts. Of course, this can work the other way too — if you do too much work in a transaction then the database engine can consume lots of space storing the not-yet-committed data or caching data for use by other database connections in order to maintain consistency, which causes a performance hit
fuente: http://www.justsoftwaresolutions.co....nsactions.html


Cita:
Because of the significant amount of disk I/O required to commit every operation on the database server and because of the extra network round trips that occur between the driver and the database, in most cases you will want to turn off auto-commit mode in your application. By doing this, your application can control when the database work is committed, which provides dramatically better performance.
Cita:
Although turning off auto-commit mode can help application performance, do not take this tip too far. Leaving transactions active can reduce throughput by holding locks on rows for longer than necessary, preventing other users from accessing the rows. Typically, committing transactions in intervals provides the best performance as well as acceptable concurrency
Cita:
In addition, be aware that leaving transactions active consumes database memory.
fuente: http://searchdatamanagement.techtarg...ion-management

PARA LOS MAS VAGOS RESUMO:

Segun los articulos que encontre usar transacciones siempre es conveniente. No solo porque mantiene la integridad sino porque aumenta la performance (contrariamente a lo que yo creia), ya que solo escribimos en el disco una vez finalizado, y las escrituras al disco son las operaciones mas lentas.
Cual es la desventaja de las transacciones entonces? solo encuentro dos:
Consume memoria
Bloquea las filas sobre las que trabaja hasta que terminemos la transaccion (las bloquea para escritura no lectura)

Asique mientras nuestras transacciones no sea muy grandes, no van a consumir demasiada memoria no bloquear por demasiado tiempo las filas, y por lo tanto es conveniente usarlas ya que aumentan la performance y mantienen la integridad.


En mi caso creo ya que son solo 3 inserts y la integridad es importante lo ideal es usar una transacción. Al menos es esa la conclusión que puedo elaborar sin la experiencia real, solo leyendo sobre el tema.
Si estoy equivocado por favor háganmelo saber.