MySQL vs PostgreSQL - Quel SGBD Choisir en 2026 ?

Comparatif technique des deux SGBD open-source dominants : MySQL et PostgreSQL. Performance, écosystème, types de données, cas d'usage et tableau récapitulatif.

Présentation

MySQL et PostgreSQL dominent le marché des bases de données relationnelles open-source depuis vingt ans. Ensemble, ils représentent plus de 70 % des bases de données déployées dans l'écosystème web et SaaS en 2026. Leur popularité est telle que beaucoup de développeurs choisissent par habitude, souvent MySQL parce que WordPress et Laravel l'utilisent par défaut, ou PostgreSQL parce que Django et Rails y poussent. Ce choix par défaut est parfois sous-optimal selon le projet.

L'enjeu du choix MySQL vs PostgreSQL n'est pas une question de "lequel est mieux dans l'absolu", les deux sont matures, performants, fiables et activement développés. Les vraies différences se jouent sur : la richesse des types de données (PostgreSQL gagne nettement), la simplicité opérationnelle (MySQL gagne souvent), les performances en lecture/écriture (selon la charge), l'écosystème (outils, ORMs, hébergement) et la culture de l'équipe. Ce guide vous donne les éléments objectifs pour trancher selon votre cas.

MySQL : fonctionnement et écosystème

MySQL a été créé en 1995 par MySQL AB, racheté par Sun en 2008 puis par Oracle en 2010. C'est aujourd'hui le SGBD open-source le plus déployé au monde, en grande partie grâce à la stack LAMP (Linux/Apache/MySQL/PHP) qui a alimenté l'explosion du web. WordPress, Drupal, Joomla, Magento et Laravel utilisent MySQL par défaut. Sa version 8.0 (et la 8.4 LTS sortie en 2024) apporte des améliorations significatives : window functions, JSON_TABLE, CTEs récursives, et un moteur InnoDB redessiné.

  • Moteur de stockage : InnoDB par défaut (transactionnel ACID, row-level locking). MyISAM existe encore pour les usages très spécifiques mais ne supporte pas les transactions.
  • Forces : extrêmement simple à administrer, écosystème pléthorique (phpMyAdmin, MySQL Workbench), réplication maître-esclave très mature, performances brutes en lecture excellentes.
  • Faiblesses : moins riche que PostgreSQL côté types de données (pas d'arrays natifs, pas de types géométriques de base), moteur d'optimisation un peu moins sophistiqué, gestion des transactions plus permissive.
  • Hébergement : disponible par défaut sur 100 % des offres mutualisées et VPS du marché.

PostgreSQL : forces et différenciation

PostgreSQL (souvent abrégé "Postgres") existe depuis 1986 (en tant que projet académique POSTGRES à Berkeley) et est devenu open-source sous licence permissive en 1996. Son développement est piloté par une communauté décentralisée, aucune entreprise ne le contrôle. En 2026, PostgreSQL est devenu la base de données "par défaut" des nouvelles applications SaaS modernes, des projets Django/Rails/Node.js, et des produits data-intensifs (analytique, ML, géospatial).

  • Types de données riches : JSON/JSONB natifs avec indexation GIN, arrays, intervalles, UUID, types géométriques (PostGIS), types personnalisés.
  • Forces : extrêmement strict sur l'ACID et l'intégrité référentielle, optimiseur de requêtes très sophistiqué, support de fonctionnalités avancées (CTEs récursives, window functions, full-text search natif, indexes partiels), extensibilité (extensions : PostGIS, pg_trgm, TimescaleDB, pgvector pour IA).
  • Faiblesses : courbe d'apprentissage légèrement plus raide, configuration plus dense (postgresql.conf compte ~300 paramètres), réplication historiquement plus complexe (gros progrès récents).
  • Hébergement : disponible sur tous les VPS modernes. Sur l'hébergement mutualisé, moins systématique que MySQL, vérifiez avant.

Tableau comparatif fonctionnel

Comparatif tête-à-tête sur les critères qui comptent en 2026 :

Quand choisir MySQL ?

  • WordPress, WooCommerce, Drupal, Magento : MySQL est le choix par défaut, écosystème optimisé.
  • Laravel + Eloquent : Laravel fonctionne parfaitement avec PostgreSQL, mais la communauté Laravel reste majoritairement sur MySQL.
  • Charges très lecture-intensive simples : lookups par clé primaire massifs (caching, sessions).
  • Équipe peu expérimentée en DB : MySQL pardonne plus, l'administration est plus simple.
  • Hébergement mutualisé : MySQL est universellement disponible, PostgreSQL parfois absent.

Quand choisir PostgreSQL ?

  • Application SaaS moderne : Django, Rails, Next.js + Prisma, FastAPI, l'écosystème pousse vers Postgres.
  • Données semi-structurées (JSON) : PostgreSQL avec JSONB et indexation GIN bat MySQL sur les requêtes JSON complexes.
  • Géospatial : PostGIS est la référence mondiale, sans équivalent côté MySQL.
  • Analytique légère, reporting : optimiseur de requêtes et window functions plus matures.
  • Intégrité forte exigée : finance, santé, audit, Postgres est strict sur l'ACID.
  • Vector search / IA : extension pgvector pour stocker embeddings et faire des recherches sémantiques.

Et MariaDB dans tout ça ?

MariaDB est un fork de MySQL créé en 2009 par les développeurs originaux de MySQL, suite au rachat par Oracle. MariaDB et MySQL restent largement compatibles (mêmes drivers, syntaxe SQL quasi identique), mais ont divergé sur certains points : MariaDB ajoute des moteurs spécialisés (ColumnStore pour l'analytique, Spider pour le sharding), des fonctions JSON différentes, et un comportement par défaut un peu plus strict. Sur l'hébergement mutualisé français (OVH, o2switch, Infomaniak), MariaDB est souvent installée par défaut à la place de MySQL, ça ne change rien à votre code applicatif dans 95 % des cas.

MySQL vs PostgreSQL - Comparatif fonctionnel

MySQL vs PostgreSQL - Comparatif fonctionnel
Critère MySQL PostgreSQL
Licence GPL (Oracle) PostgreSQL License (permissive, type BSD)
ACID Oui (InnoDB) Oui, strict par défaut
JSON / JSONB JSON natif, indexation possible JSONB + GIN, référence du marché
Full-text search FULLTEXT InnoDB (correct) Tsvector + indexation GIN (très complet)
Réplication Master-replica très mature, simple Streaming + logical replication (puissant)
Performance lectures Excellente, surtout lookups simples Excellente, optimiseur plus sophistiqué
Performance écritures Très bonne (InnoDB row-lock) Très bonne, MVCC efficace
Extensibilité Limitée (plugins moteur) Extensions (PostGIS, pgvector, TimescaleDB)
Cas d'usage typique WordPress, Magento, Laravel, sessions SaaS, Django/Rails, géo, analytique, IA
Communauté Énorme, Oracle-backed Énorme, communautaire et indépendante

Questions fréquentes

Cela dépend de la charge. Sur des lookups simples massifs (sessions, cache), MySQL/InnoDB est très efficace. Sur des requêtes complexes (multi-joins, agrégations, window functions), PostgreSQL bat souvent MySQL grâce à son optimiseur plus sophistiqué. La différence est rarement dramatique en dessous de quelques millions d'enregistrements.

Officiellement, non. WordPress ne supporte que MySQL/MariaDB nativement. Des projets non-officiels existent (HyperDB, plugins de portage) mais sont peu maintenus. Pour WordPress, restez sur MySQL ou MariaDB.

Pour un SaaS moderne avec un stack Django/Rails/Next.js/FastAPI, PostgreSQL est très largement recommandé par la communauté : richesse des types, JSONB pour les schémas semi-structurés, écosystème managé excellent (Neon, Supabase, RDS, By-Hoster VPS).

Oui pour la plupart des projets. MariaDB est 100% compatible avec MySQL pour le code applicatif WordPress/Laravel/Symfony standard. Elle apporte quelques fonctionnalités en plus (moteurs spécialisés, JSON, sécurité). Beaucoup d'hébergeurs ont remplacé MySQL par MariaDB sans que les clients s'en rendent compte.

Trois étapes : 1) Exporter le schéma avec mysqldump --no-data puis adapter les types (TINYINT, ENUM, etc.). 2) Migrer les données via pgloader qui automatise une grande partie. 3) Adapter le code applicatif : syntaxe SQL spécifique (LIMIT vs LIMIT/OFFSET, AUTOINCREMENT vs SERIAL, fonctions date). Comptez 1 à 5 jours selon la taille.

Légèrement, oui. PostgreSQL utilise un processus par connexion (plus coûteux que les threads MySQL), ce qui pousse vers l'usage d'un pool de connexions comme PgBouncer. En pratique, sur un VPS 2 Go, les deux tournent confortablement avec quelques optimisations de shared_buffers (Postgres) ou innodb_buffer_pool_size (MySQL).