sql >> Database >  >> RDS >> PostgreSQL

Postgres 9.1 versus Mysql 5.6 InnoDB?

PostgreSQL is een stuk geavanceerder als het gaat om SQL-functies.

Dingen die MySQL nog steeds niet heeft (en PostgreSQL heeft):

  • uitstelbare beperkingen

  • controleer beperkingen (MySQL 8.0.16 heeft ze toegevoegd, MariaDB 10.2 heeft ze)

  • volledige outer join
    MySQL gebruikt stil een inner join met enkele syntaxisvariaties:
    https://rextester.com/ADME43793

  • laterale verbindingen

  • reguliere expressies werken niet met UTF-8 (Opgelost met MySQL 8.0)

  • reguliere expressies ondersteunen geen vervanging of substring (Geïntroduceerd met MySQL 8.0)

  • tabelfuncties ( select * from my_function() )

  • veelvoorkomende tabeluitdrukkingen (Geïntroduceerd met MySQL 8.0)

  • recursieve zoekopdrachten (Geïntroduceerd met MySQL 8.0)

  • beschrijfbare CTE's

  • vensterfuncties (Geïntroduceerd met MySQL 8.0)

  • op functie gebaseerde index

  • gedeeltelijke index

  • INCLUSIEF extra kolom in indexen (bijv. voor unieke indexen)

  • statistieken met meerdere kolommen

  • zoeken in volledige tekst op transactietabellen (MySQL 5.6 ondersteunt dit)

  • GIS-functies op transactietabellen

  • BEHALVE of INTERSECT-operator (MariaDB heeft ze)

  • je kunt een tijdelijke tabel niet twee keer gebruiken in hetzelfde select-statement

  • u kunt de tabel die wordt gewijzigd (bijwerken/verwijderen/invoegen) niet gebruiken in een subselectie

  • u kunt geen weergave maken die een afgeleide tabel gebruikt (Mogelijk sinds MySQL 8.0)

      create view x as select * from (select * from y);
    
  • leesconsistentie op statementniveau. Nodig voor bijv.:
    update foo set x = y, y = x of
    update foo set a = b, a = a + 100

  • transactie DDL

  • DDL-triggers

  • uitsluitingsbeperkingen

  • sleutel/waarde winkel

  • Volledige JSON-documenten indexeren

  • SQL/JSON Pad-expressies (sinds Postgres 12)

  • bereiktypes

  • domeinen

  • arrays (inclusief indexen op arrays)

  • rollen (groepen) om gebruikersrechten te beheren (MariaDB heeft ze, geïntroduceerd met MySQL 8.0)

  • parallelle zoekopdrachten (sinds Postgres 9,6 )

  • parallelle index maken (sinds Postgres 11)

  • door de gebruiker gedefinieerde gegevenstypen (inclusief controlebeperkingen)

  • gerealiseerde weergaven

  • aangepaste aggregaten

  • aangepaste vensterfuncties

  • juiste boolean gegevenstype
    (het behandelen van elke uitdrukking die kan worden geconverteerd naar een getal dat niet nul is als "waar" is niet een correct booleaans type)

Als het gaat om Spatial/GIS-functies, is Postgres met PostGIS ook veel capabeler. Hier is een mooie vergelijking.

Ik weet niet zeker wat je "gebruiksgemak" noemt, maar er zijn verschillende moderne SQL-functies die ik niet zou willen missen (CTE's, vensterfuncties) die "gebruiksgemak" voor mij zouden definiëren.

Nu is PostgreSQL niet perfect en waarschijnlijk het meest onaangename dat kan zijn, om het gevreesde VACUUM-proces af te stemmen op een zware schrijfdatabase.



  1. MySQL Verwijder dubbele records

  2. Hoe hernoem je iets in SQL Server met vierkante haken in de naam?

  3. JSON invoegen in een tabel in SQL Server

  4. Typen in MySQL:BigInt(20) vs Int(20)