Re: Compatibilidad MySQL/PostgreSQL

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Rafael Taboada <kaliman(dot)forever(at)gmail(dot)com>
Cc: Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Compatibilidad MySQL/PostgreSQL
Date: 2005-08-16 03:27:33
Message-ID: 20050816032733.GD27414@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Mon, Aug 15, 2005 at 03:15:28PM -0500, Rafael Taboada wrote:
> Hola Alvaro. Y porque PostgreSQL es mas lento??? Que opciones hay para
> revertir este inconveniente???

Hay varios motivos: uno es que los chequeos sobre los datos de entrada
son mas intensos (por esto es que MySQL acepta una fecha "31 de febrero"
mientras que Postgres la rechaza). Esto agrega un poco de sobrecosto.

Otro es que para poder implementar transaccionalidad, hay un sobrecosto
de almacenamiento en disco; y por lo tanto para hacer busquedas, hay que
leer mas estructuras en disco, perseguir mas punteros, lo cual hace un
poco mas lento el recorrido.

Ademas, se hacen ciertas operaciones para asegurar que tus datos van a
seguir siendo validos aun en caso de que el suministro electrico se
interrumpa. Caracteristicas asi, individualmente no imponen mucho
tiempo de procesamiento extra. Pero entre todas, hacen que el sistema
sea medible y consistentemente mas lento.

Ahora, si te fijas bien, MySQL tambien tiene un modo transaccional: las
tablas InnoDB. Es interesante notar que si haces comparaciones de
rendimiento entre un sistema MySQL con InnoDB y Postgres, los resultados
son muy similares.

Otra cosa es que el motor de Postgres es mucho mas poderoso e
inteligente que el de MySQL. MySQL es pura "fuerza bruta": su principal
fortaleza es entregar respuestas muy rapidas a consultas simples. Por lo
tanto, muchas de las cosas que quieres hacer tienes que implementarlas
en tu codigo de aplicacion (PHP o lo que sea). En cambio, si aprovechas
las mucho mayores capacidades de Postgres, puedes obtener respuestas mas
elaboradas desde la base de datos, y dejar menos procesamiento a la
aplicacion.

Esto no es teoria -- hay un proyecto llamado tpc-w-php que es un TPC-W
implementado en PHP, tanto para MySQL como para Postgres. El codigo
aprovecha todas las capacidades de Postgres, pero en MySQL muchas cosas
hubo que implementarlas en PHP. El resultado es que el codigo de
Postgres es mucho mas limpio, el de MySQL es mucho mas feo y mayor, y
sorpresa -- al final, el rendimiento es comparable entre ambos. Aunque
Postgres sea "mas lento", tu lo haces trabajar a tu favor dandole mas
tarea. Cosa que no puedes hacer con el InnoDB de MySQL, porque aunque
tiene capacidades transaccionales, el motor sigue siendo estupido.
(Ademas, las transacciones no lo son todo)

--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"In Europe they call me Niklaus Wirth; in the US they call me Nickel's worth.
That's because in Europe they call me by name, and in the US by value!"

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-08-16 03:28:13 Re: Compatibilidad MySQL/PostgreSQL
Previous Message Alvaro Herrera 2005-08-16 03:15:56 Re: Como se establecen las relaciones en POstgre