En mysql se demoró 4.6 horas.
Esto tiene sentido desde el punto de vista que para postgresql, una función, paquete, procedimiento o trigger la toma como un bloque entero. Es decir, se inicia una transacción cuando se ejecuta la función. Entonces... toda esta información no va directamente a disco sino a buffers de memoria ram. Cuando esta se llena, esta información pasa a disco pero a un espacio temporal. Cuando la transacción finaliza, toda esta información es copiada en su totalidad a disco y se genera un commit implicito.
Por otro lado, mysql copia directamente a disco lo que lo hace mucho mas veloz. Con la desventaja de tener inconsistencia de los datos ante un fallo inesperado.
Una de las pruebas que hice, fue tener un bloque en ambos motores que insertara 20 registros. Al registro 18 generaba un error. En mysql revisaba la tabla y encontraba 17 registros insertados. Por el contrario en postgresql al encvontrar una excepción o un error, inmediatamente hace rollback de la operación dejando las cosas tal cual se encuentran.
No quiero que piensen que estoy defendiendo a postgresql (Aunque me gusta mas
) ya que esto que comento mysql fácilmente lo puede tratar con transacciones que también las trabaja bastante bien, solo quería dar una explicación del por que se da la diferencia de tiempos de inserción de registros.
Algo que no sabía, es que postgresql viene en su configuración por defecto para trabajar en un PC con 1GB de ram, un procesador basico y poco espacio en disco. Las configruaciones iniciales de mysql no las conozco. Unas pruebas que prometo hacer cuando tenga listo el servidor es afinar al maximo postgresql y hacer pruebas comparativas con la configuración basica por defecto.
Sería bueno que alguno de ustedes afinara bien un servidor mysql y hacer una competencia de motores
saludos a todos