PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres 9.1 vs. MySQL 5.6 InnoDB?

PostgreSQL ist viel fortschrittlicher, wenn es um SQL-Funktionen geht.

Dinge, die MySQL immer noch nicht hat (und PostgreSQL hat):

  • aufschiebbare Beschränkungen

  • Einschränkungen prüfen (MySQL 8.0.16 hinzugefügt, MariaDB 10.2 hat sie)

  • vollständiger äußerer Join
    MySQL verwendet stillschweigend einen inneren Join mit einigen Syntaxvariationen:
    https://rextester.com/ADME43793

  • seitliche Verbindungen

  • reguläre Ausdrücke funktionieren nicht mit UTF-8 (Behoben mit MySQL 8.0)

  • reguläre Ausdrücke unterstützen keine Ersetzungen oder Teilzeichenfolgen (Eingeführt mit MySQL 8.0)

  • Tabellenfunktionen ( select * from my_function() )

  • allgemeine Tabellenausdrücke (Eingeführt mit MySQL 8.0)

  • rekursive Abfragen (Eingeführt mit MySQL 8.0)

  • beschreibbare CTEs

  • Fensterfunktionen (Eingeführt mit MySQL 8.0)

  • funktionsbasierter Index

  • Teilindex

  • INCLUDE zusätzliche Spalte in einem Index (z. B. für eindeutige Indizes)

  • mehrspaltige Statistiken

  • Volltextsuche in Transaktionstabellen (MySQL 5.6 unterstützt dies)

  • GIS-Features in Transaktionstabellen

  • EXCEPT- oder INTERSECT-Operator (MariaDB hat sie)

  • Sie können eine temporäre Tabelle nicht zweimal in derselben SELECT-Anweisung verwenden

  • Sie können die zu ändernde Tabelle (aktualisieren/löschen/einfügen) nicht in einer Unterauswahl verwenden

  • Sie können keine Ansicht erstellen, die eine abgeleitete Tabelle verwendet (Möglich seit MySQL 8.0)

      create view x as select * from (select * from y);
    
  • Lesekonsistenz auf Anweisungsebene. Benötigt für z. B.:
    update foo set x = y, y = x oder
    update foo set a = b, a = a + 100

  • Transaktions-DDL

  • DDL-Trigger

  • Ausschlussbeschränkungen

  • Schlüssel/Wert-Speicher

  • Vollständige JSON-Dokumente indexieren

  • SQL/JSON-Pfadausdrücke (seit Postgres 12)

  • Bereichstypen

  • Domänen

  • Arrays (einschließlich Indizes auf Arrays)

  • Rollen (Gruppen) zum Verwalten von Benutzerrechten (MariaDB hat sie, eingeführt mit MySQL 8.0)

  • parallele Abfragen (seit Postgres 9.6 )

  • parallele Indexerstellung (seit Postgres 11)

  • benutzerdefinierte Datentypen (einschließlich Check Constraints)

  • materialisierte Aufrufe

  • benutzerdefinierte Aggregate

  • benutzerdefinierte Fensterfunktionen

  • richtiger boolean Datentyp
    (Jeden Ausdruck, der in eine Zahl ungleich Null umgewandelt werden kann, als "wahr" zu behandeln, ist nicht ein richtiger boolescher Typ)

Wenn es um räumliche/GIS-Funktionen geht, ist Postgres mit PostGIS ebenfalls viel leistungsfähiger. Hier ist ein schöner Vergleich.

Ich bin mir nicht sicher, was Sie "Benutzerfreundlichkeit" nennen, aber es gibt mehrere moderne SQL-Funktionen, die ich nicht missen möchte (CTEs, Windowing-Funktionen), die für mich "Benutzerfreundlichkeit" definieren würden.

Nun, PostgreSQL ist nicht perfekt und wahrscheinlich das Anstößigste, was es sein kann, den gefürchteten VACUUM-Prozess für eine Datenbank mit vielen Schreibvorgängen zu tunen.