PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres 9.1 contre Mysql 5.6 InnoDB ?

PostgreSQL est beaucoup plus avancé en ce qui concerne les fonctionnalités SQL.

Choses que MySQL n'a toujours pas (et que PostgreSQL a) :

  • contraintes reportables

  • vérifier les contraintes (MySQL 8.0.16 les a ajoutés, MariaDB 10.2 les a)

  • jointure externe complète
    MySQL utilise silencieusement une jointure interne avec quelques variations de syntaxe :
    https://rextester.com/ADME43793

  • jointures latérales

  • les expressions régulières ne fonctionnent pas avec UTF-8 (Corrigé avec MySQL 8.0)

  • les expressions régulières ne prennent pas en charge le remplacement ou la sous-chaîne (Introduit avec MySQL 8.0)

  • fonctions de table ( select * from my_function() )

  • expressions de table courantes (Introduit avec MySQL 8.0)

  • requêtes récursives (Introduit avec MySQL 8.0)

  • CTE inscriptibles

  • fonctions de fenêtre (Introduit avec MySQL 8.0)

  • index basé sur la fonction

  • index partiel

  • INCLURE une colonne supplémentaire dans un index (par exemple pour les index uniques)

  • statistiques multi-colonnes

  • recherche plein texte sur les tables transactionnelles (MySQL 5.6 le prend en charge)

  • Fonctionnalités SIG sur les tables transactionnelles

  • Opérateur EXCEPT ou INTERSECT (MariaDB les a)

  • vous ne pouvez pas utiliser une table temporaire deux fois dans la même instruction select

  • vous ne pouvez pas utiliser la table en cours de modification (mise à jour/suppression/insertion) dans une sous-sélection

  • 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);
    
  • cohérence de lecture au niveau de l'instruction. Nécessaire pour, par exemple :
    update foo set x = y, y = x ou
    update foo set a = b, a = a + 100

  • DDL transactionnel

  • Déclencheurs DDL

  • contraintes d'exclusion

  • magasin clé/valeur

  • Indexation de documents JSON complets

  • Expressions de chemin SQL/JSON (depuis Postgres 12)

  • types de plages

  • domaines

  • tableaux (y compris les index sur les tableaux)

  • rôles (groupes) pour gérer les privilèges des utilisateurs (MariaDB les a, Introduit avec MySQL 8.0)

  • requêtes parallèles (depuis Postgres 9.6 )

  • création d'index parallèles (depuis Postgres 11)

  • types de données définis par l'utilisateur (y compris les contraintes de vérification)

  • vues matérialisées

  • agrégats personnalisés

  • fonctions de fenêtre personnalisées

  • bon boolean type de données
    (traiter toute expression pouvant être convertie en un nombre différent de zéro comme "vrai" n'est pas un type booléen approprié)

En ce qui concerne les fonctionnalités spatiales/GIS, Postgres avec PostGIS est également beaucoup plus performant. Voici une belle comparaison.

Je ne sais pas ce que vous appelez "facilité d'utilisation", mais il existe plusieurs fonctionnalités SQL modernes que je ne voudrais pas manquer (CTE, fonctions de fenêtrage) qui définiraient la "facilité d'utilisation" pour moi.

Maintenant, PostgreSQL n'est pas parfait et probablement la chose la plus odieuse peut être, d'ajuster le redoutable processus VACUUM pour une base de données en écriture lourde.