¿MySQL es mejor que PostgreSQL en algo?

8

Sé que la pregunta suena provocativa, pero realmente no lo es. Últimamente encuentro que MySQL limita en muchas áreas y me gusta cada vez más PostgreSQL. Se escala mucho mejor y respeta los estándares SQL mucho más que MySQL.

Sin embargo, todavía soy nuevo en el mundo de PostgreSQL y, dado que estoy dispuesto a alejarme de MySQL para todos mis proyectos futuros, lo que quiero saber es: ¿hay alguna característica particular de MySQL que se haga mejor (como en más de alto rendimiento o más fácil de usar, etc.) que en PostgreSQL?

Me pregunto qué voy a extrañar de MySQL. Ya descubrí que los campos AUTO_INCREMENT en MySQL son más útiles que SECUENCIAS en PostgreSQL y la implementación en Windows fue problemática en el pasado (ya no es un problema. Nunca fue un problema para mí).

¿Qué más?

Massimiliano Torromeo
fuente
Aquí hay una especie de curiosidad: stackoverflow.com/questions/2221787/…
Paul
Odio mysql, pero hace MERGE / UPSERT más fácilmente que PG, y encuentro molestos los campos sensibles a mayúsculas y minúsculas
Neil McGuigan,

Respuestas:

3

Está abordando esto claramente desde la perspectiva del desarrollador, por lo que puede encontrar respuestas más útiles en SO.

Desde una perspectiva administrativa:
- Replicación (HA)
- Replicación (Scaling *)
- Replicación (Backups)
- Soporte de aplicaciones
- Tamaño y profundidad de la comunidad (Documentación, Soporte)
- Base de instalación existente / trabajos disponibles

* Tenga en cuenta que mencionó postgresescalar mejor. escalar significa algo diferente para todos, pero como regla general, las cosas que tienen una ruta para distribuir la carga en múltiples servidores escalan mejor que las cosas que no lo hacen.

cagenut
fuente
También estoy interesado en los aspectos administrativos. No estaba seguro de dónde publicar esto. Por cierto, tienes razón sobre el escalado. Por escalas mejor quise decir, en una sola máquina, no en grupos. MySQL tiene muy poca ganancia de rendimiento en sistemas multinúcleo y hoy en día multinúcleo son la norma. También he visto a MySQL pasar de un buen rendimiento a casi inútil cuando aumenta la carga de trabajo, y la impresión fue que postgresql habría manejado mejor la carga, pero entiendo que esto es discutible y debería investigarse mejor. Por cierto, vale la pena considerar los argumentos de replicación.
Massimiliano Torromeo
1
MySQL solía tener muy poca ganancia de rendimiento en multinúcleo, pero si está ejecutando una compilación 5.0 bien parcheada, casi cualquier compilación 5.1, una compilación innodb-plugin (/ xtradb) o una compilación 5.4 ya no es así. No trato de ser confrontativo, pero su desaceleración anecdótica de mysql podría haberse abordado casi con seguridad, y su postgres de "impresión" lo habría manejado mejor es una suposición desnuda. El punto clave aquí es que postgres vs. mysql es algo de lo que se puede hablar mucho desde una perspectiva de desarrollo y sofisticación, pero desde una perspectiva operativa / comercial, el caso se cerró hace años.
cagenut
Por supuesto, especifiqué que era solo una impresión porque si realmente no intento servir los mismos datos bajo la misma carga, no puedo estar seguro, y sé que realmente no estoy probando nada. Gracias por aclarar las últimas ganancias de rendimiento de MySQL.
Massimiliano Torromeo
Siempre uso el tipo "serial" en postgres, lo encuentro más útil que "intere auto_increment". ¿O tal vez quisiste decir algo más?
ptman
3

COUNT (*) también es mucho más lento con PSQL. Se supone que debe crear desencadenantes para este tipo de funcionalidad.

EarthMind
fuente
1
Interesante, pero por lo que he entendido, esto solo se aplica a COUNT (*) consultas SIN la cláusula where en el motor MyISAM. Aparte de eso, funciona de manera similar. ¿O es postgresql aún más lento incluso en comparación con InnoDB y MyISAM con una cláusula where?
Massimiliano Torromeo
Qué quieres decir con eso ? seleccione count ( ) de foo; no funciona en pgsql? Si bien es cierto que count ( ) es más lento en postgres en comparación con mysql, hay una razón para eso y una solución alternativa. Se puede encontrar una buena descripción en wikivs.com/wiki/MySQL_vs_PostgreSQL
Sibster
1
Es más lento por la misma razón que InnoDB de MySQL, lea más aquí: wikivs.com/wiki/MySQL_vs_PostgreSQL#COUNT.28.2A.29
EarthMind
3
COUNT (*) es más lento debido a la implementación de MVCC. Usted gana en términos de rendimiento de lectura / escritura, pero debido a que las transacciones pueden realizarse en varios estados, se hace difícil determinar cuál es el recuento "verdadero".
Avery Payne
2

Debido a que Postgres efectivamente hace una copia en escritura para cada actualización (para que pueda manejar transacciones), si no necesita transacciones y hace muchas escrituras en relación con las lecturas, MySQL no tendrá la sobrecarga que PostgreS será. (cada registro actualizado necesita escribir más, actualizar índices, etc.)

Joe H.
fuente
1
Creo que deberías calificar eso solo un poco. Sí, será más rápido, pero no habrá garantía de coherencia en sus datos. Esto está perfectamente bien para algunas situaciones (escritos de comentarios de usuarios de un sitio web) pero puede plantear problemas en otros (tomar un pedido de "carrito de compras" en línea).
Avery Payne
1

Puedo pensar en una cosa que falta en PostgreSQL:

Creo que también hubo algo con el bloqueo, inserción o actualización. Pero parece que no puedo recordar qué era en realidad. : S

Egon
fuente
1

El campo auto_increment que es 'práctico' no es muy relevante, ¿verdad? Oracle tiene secuencias y es, sin duda, la base de datos comercial más utilizada en el mundo.

Hay una gran cantidad de información que se puede encontrar sobre cómo PostgreSQL si es más seguro contra colisiones, etc. Solo voy a señalar esta página en el wiki de PostgreSQL (sin duda una opinión coloreada, pero eso es lo que estás buscando de todos modos).

Mucha gente menciona en esta página que MySQL es más amigable para los novatos. ¿Entonces? Explíqueme cómo eso es importante en un entorno de misión crítica.

wzzrd
fuente
Al ser secuencias, el enfoque más utilizado no hace que los campos de autoincremento sean menos 'prácticos', y es relevante para mí porque estoy pidiendo diferencias entre los 2 dbms en cuestión. Pero esto no me impide cambiar a pgsql, así que estoy de acuerdo en que no es un problema real.
Massimiliano Torromeo
1

MySQL se llama a menudo como grep de SQL . En cuanto a mí (ahora en el momento de la escritura), se parece bastante a PHP, bastante incómodo, pero popular.

Me pregunto qué voy a extrañar de MySQL.

Intente renombrar una base de datos desde el principio. ;) Luego agregue índices condicionales (faltantes).

PD: Puedo señalar al menos una buena característica indiscutible que tiene MySQL: admite tipos de datos de conservación de espacio tan pequeños como byte (sin signo), por ejemplo. Esto podría ahorrar mucha RAM y espacio en disco cuando se usa en consecuencia. Pero hay muy pocas cosas para mencionar además, por desgracia. Y la comparación en el enlace que le han dado es realmente ingeniosa.

revs poige
fuente
0

auto_increment es útil hasta que te das cuenta de que apestan para tablas con una concurrencia de inserción extremadamente alta, en ese momento se convierten en un cuello de botella y te ves obligado a implementar una secuencia usando una tabla MyISAM.

De todos modos, para responder a su pregunta, lo más importante que ha tenido MySQL ha sido la configuración fácil de replicación que permite el encadenamiento de replicación y la lectura de esclavos. Sin embargo, Postgres tendrá eso en la próxima versión, 9.0 (que ya está en estado alfa).

mage2k
fuente