Question simple - quoi de mieux pour une base de données de taille moyenne/grande avec une exigence de compatibilité avec ACID en 2012.
J'ai tout lu (enfin la plupart) sur mySQL vs pgSQL mais la plupart de ces articles concernent respectivement les versions 4,5,1 et 7,8 et sont assez datés (2008,2009). C'est presque 2012 maintenant, donc je suppose que nous pourrions essayer de jeter un nouveau regard sur la question.
En gros, je voudrais savoir s'il y a quelque chose dans PostgreSQL qui dépasse la facilité d'utilisation, la disponibilité et une plus grande base de développeurs/connaissances de MySQL.
L'optimiseur de requêtes de MySQL est-il toujours stupide? Est-il toujours super lent sur des requêtes très compliquées?
Frappez-Moi! :)
PS. Et ne m'envoyez pas de lunettes ni de wiki. Je suis à la recherche de quelques points spécifiques et non d'un aperçu + Je fais plus confiance à StackOverflow qu'à une page aléatoire avec un "gars intelligent" qui brille de sa lumière.
Addendum
Taille du projet : Supposons un système de commande avec environ 10-100 commandes/jour par compte, quelques milliers de comptes, éventuellement, chacun peut avoir plusieurs centaines à plusieurs milliers d'utilisateurs.
Mieux à : être à l'épreuve du temps et flexible en ce qui concerne les exigences croissantes et changeantes. Les performances sont également importantes pour maintenir les coûts bas dans le département du matériel. La disponibilité d'une main-d'œuvre qualifiée serait également un facteur.
OLTP ou OLAP : OLTP
L'optimiseur de requêtes de MySQL est-il toujours stupide? Est-il toujours super lent sur des requêtes très compliquées?
Tous les optimiseurs de requête sont parfois stupides. PostgreSQL est moins stupide dans la plupart des cas. Certaines des fonctionnalités SQL les plus récentes de PostgreSQL (fonctions de fenêtrage, requêtes récursives AVEC, etc.) sont très puissantes mais si vous avez un ORM stupide, elles pourraient ne pas être utilisables.
Taille du projet: disons un système de commande avec environ 10 à 100 commandes/jour par compte, quelques milliers de comptes, éventuellement, chacun peut avoir plusieurs centaines à plusieurs milliers d'utilisateurs.
Ne sonne pas si grand - bien à portée d'une grande boîte.
Mieux: être évolutif et flexible en ce qui concerne les exigences croissantes et changeantes.
PostgreSQL dispose d'une solide équipe de développeurs, avec une communauté étendue de contributeurs. Politique de publication est strict, avec des corrections de bugs uniquement dans les versions ponctuelles. Suivez toujours la dernière version de 9.1.x pour les corrections de bogues.
Dans le passé, MySQL a eu une attitude un peu plus détendue vis-à-vis des numéros de version. Cela pourrait changer avec Oracle en charge. Je ne connais pas les politiques des différentes fourches.
Les performances sont également importantes pour maintenir les coûts bas dans le département du matériel.
Je serais surpris si le matériel s'avérait être un composant majeur dans un projet de cette taille.
La disponibilité d'une main-d'œuvre qualifiée serait également un facteur.
C'est votre décision clé. Si vous avez une équipe de pirates expérimentés Perl + PostgreSQL assis au ralenti, utilisez-le. Si vos gens connaissent LISP et MySQL, utilisez-le.
OLTP ou OLAP: OLTP
PostgreSQL a toujours été fort sur OLTP.
Mon point de vue personnel est que la liste de diffusion PostgreSQL est remplie de personnes polies, serviables et compétentes. Vous avez un contact direct avec les utilisateurs des bases de données Terabyte et les pirates qui ont construit des parties majeures du code. La qualité du support est vraiment excellente.
PostgreSQL est beaucoup plus avancé en ce qui concerne les fonctionnalités SQL.
Choses que MySQL n'a toujours pas (et PostgreSQL a):
jointure externe complète
MySQL utilise silencieusement une jointure interne avec quelques variantes de syntaxe:
https://rextester.com/ADME4379
jointures latérales
select * from my_function()
)vous ne pouvez pas créer une vue qui utilise une table dérivée(Possible depuis MySQL 8.0)
create view x as select * from (select * from y);
update foo set x = y, y = x
ouupdate foo set a = b, a = a + 100
boolean
appropriéEn ce qui concerne les fonctionnalités spatiales/SIG, Postgres avec PostGIS est également beaucoup plus performant. Ici est une belle comparaison.
Je ne sais pas ce que vous appelez "facilité d'utilisation" mais il y a plusieurs fonctionnalités SQL modernes que je ne voudrais pas manquer (CTE, fonctions de fenêtrage) qui définiraient pour moi "facilité d'utilisation".
Maintenant, PostgreSQL n'est pas parfait et probablement la chose la plus désagréable peut être, pour régler le processus VACUUM redouté pour une base de données d'écriture lourde.
En plus de @ a_horse_with_no_name answer , je veux nommer quelques fonctionnalités que j'aime tant dans PostgreSQL:
key->value
données, possible de créer un index sur des colonnes de ce type;distinct on
syntaxe - Je pense que celle-ci devrait être une fonctionnalité SQL ANSI, elle me semble très naturelle (par opposition au groupe MySQL par syntaxe);PostgreSQL est une base de données plus mature, elle a un historique plus long, elle est plus conforme à ANSI SQL, son optimiseur de requêtes est nettement meilleur. MySQL a différents moteurs de stockage comme MyISAM, InnoDB, en mémoire, tous sont incompatibles dans le sens où une requête SQL qui s'exécute sur un moteur peut produire une erreur de syntaxe lorsqu'elle est exécutée sur un autre moteur. Les procédures stockées sont meilleures dans PostgreSQL.