MySQL, PostgreSQL a MS SQL Server: srovnání databází

MySQL, PostgreSQL, MS SQL Server: Komparativní srovnání databází

Proč srovnávat MySQL, PostgreSQL a Microsoft SQL Server

MySQL, PostgreSQL a Microsoft SQL Server (MS SQL) patří mezi nejrozšířenější relační databázové systémy. Každý z nich má odlišnou filozofii, licenční model, rozsah funkcí a provozní nároky. Následující srovnání se zaměřuje na architekturu, výkon, škálování, bezpečnost, nástroje a typické scénáře použití tak, aby bylo možné kvalifikovaně zvolit technologii pro konkrétní projekt či organizaci.

Architektura, transakce a MVCC

  • MySQL: Standardem je InnoDB s MVCC, redo/undo logy a clustered indexem na primárním klíči. Podporuje transakční ACID, izolaci na úrovni REPEATABLE READ (výchozí nastavení) a gap locks pro zajištění konzistence.
  • PostgreSQL: Čisté MVCC s verzemi řádků ukládanými přímo v tabulce; pro úklid mrtvých tuple vyžaduje VACUUM/AUTOVACUUM. Nabízí velmi robustní transakční vrstvu, savepointy a širokou škálu režimů locking.
  • MS SQL Server: Implementuje row-versioning pro omezení blokování (RCSI/SI), tradičně používá jako výchozí úroveň izolace READ COMMITTED. Vyznačuje se silnou integrací s tempdb a propracovaným řízením zdrojů (Resource Governor).

Kompatibilita s SQL, dialekty a rozšiřitelnost

  • MySQL: SQL dialekt s některými historickými odchylkami; nabízí solidní podporu window functions, CTE a funkcí JSON. Umožňuje používat procedury v syntaxi podobné SQL/PSM, triggery a events.
  • PostgreSQL: Nejvíce se blíží ANSI SQL, nabízí bohaté CTE (včetně rekurzivních), window functions, full-text vyhledávání a range types. Podporuje rozšíření (PostGIS, TimescaleDB, pg_stat_statements, pgvector) a uživatelské typy i funkce v PL/pgSQL, PL/Python atd.
  • MS SQL: Nabízí výkonný T-SQL (okna, pivot/unpivot, bohaté analytic functions), integraci CLR a agenta pro plánované úlohy. Zahrnuje širokou škálu podnikových funkcí (partitioned views, temporal tables).

Datové typy, JSON a nestrukturovaná data

  • MySQL: Nativní typ JSON s možností indexování prostřednictvím generated columns a functional indexes. Geografická data podporuje prostřednictvím MySQL Spatial (OpenGIS).
  • PostgreSQL: JSONB s indexy GIN/GiST, operátory a širokou škálou funkcí; hstore. Špičkové možnosti práce s geografickými daty nabízí rozšíření PostGIS.
  • MS SQL: JSON ukládá do NVARCHAR a nabízí příslušné funkce (OPENJSON, JSON_VALUE); podporuje XML s XQuery a pokročilé prostorové operace (spatial) s typy geography/geometry.

Indexy a optimalizátor dotazů

  • MySQL: B-tree, hash (Memory), invisible indexes, covering indexy a histograms. Využívá nákladově založený optimalizátor a statistiky pro jednotlivé tabulky. InnoDB používá clustered PK.
  • PostgreSQL: B-tree, GIN, GiST, SP-GiST, BRIN (pro rozsáhlá časoprostorová data), partial a expression indexy i vícesloupcové statistiky. Nabízí velmi vyspělý plánovač a nástroje EXPLAIN/ANALYZE.
  • MS SQL: B-tree, columnstore (clustered/nonclustered) pro analytiku, filtered indexes a included columns. Vyznačuje se špičkovým optimalizátorem, nástrojem Query Store a adaptivními plány.

Particionace, škálování a paralelismus

  • MySQL: Podporuje range/list/hash partitioning na úrovni tabulek; paralelismus je spíše omezený (na úrovni jednotlivých dotazů), replikace umožňuje horizontální škálování čtení.
  • PostgreSQL: Nabízí deklarativní partitioning (range/list/hash), paralelní query/execution a FDW pro sharding a federaci; rozšíření Citus podporuje distribuované úlohy.
  • MS SQL: Podporuje nativní partitioning prostřednictvím partition functions/schemes, paralelní plány a PolyBase/externí tabulky. V edicích Enterprise nabízí široký ekosystém pro vertikální i horizontální škálování.

Replikace, vysoká dostupnost a zotavení

  • MySQL: Podporuje asynchronní a semi-sync replikaci (binlog), group replication/InnoDB Cluster a MySQL Router. GTID zjednodušuje failover.
  • PostgreSQL: Nabízí WAL shipping, streaming replikaci (synchronní/asynchronní) a logical replication pro selektivní změny; k dispozici jsou řešení jako Patroni, pgPool-II a repmgr. Point-in-Time Recovery umožňuje obnovu prostřednictvím archivů WAL.
  • MS SQL: Podporuje Always On Availability Groups (synchronní/asynchronní, sekundární instance pouze pro čtení), Failover Cluster Instance, log shipping a replication (snapshot/transactional/merge).

Zabezpečení, compliance a audit

  • MySQL: Nabízí role, oprávnění definer pro procedury, Transparent Data Encryption v placených edicích (MySQL Enterprise) a audit log.
  • PostgreSQL: Podporuje role a Row-Level Security, pgcrypto a nativní autentizaci SASL/SCRAM; citlivá nastavení se definují v pg_hba.conf. Audit lze řešit pomocí rozšíření (pgaudit).
  • MS SQL: Nabízí TDE, Always Encrypted, Dynamic Data Masking, Row-Level Security, certifikace FIPS/DoD v prostředích Enterprise, detailní audit a Policy-Based Management.

Nástroje, správa a ekosystém

  • MySQL: MySQL Shell, Workbench; početná komunita (Percona, kompatibilita s MariaDB s určitými odchylkami). Monitorovací nástroje: PMM, VividCortex aj.
  • PostgreSQL: psql, pgAdmin, psqlODBC a rozsáhlá nabídka open-source nástrojů (Timescale, PostGIS, Patroni). Vyznačuje se velmi dobrou rozšiřitelností a standardními ovladači.
  • MS SQL: SQL Server Management Studio (SSMS), Azure Data Studio, Agent, Profiler/Extended Events a integrované SSIS/SSAS/SSRS (on-prem).

Licencování a celkové náklady

  • MySQL: Komunitní edice (GPLv2), Enterprise s placenou podporou a dalšími funkcemi (TDE, firewall, audit). Počáteční CAPEX bývá často nízký.
  • PostgreSQL: Plně open-source (PostgreSQL License, podobná BSD/MIT). Komerční podporu nabízejí poskytovatelé (např. EDB).
  • MS SQL: Edice Express/Developer zdarma (s omezeními), Standard/Enterprise licencované podle počtu jader se SA; vysoký CAPEX/OPEX, ale bohatá nabídka podnikových funkcí a integrací.

Cloudové služby a provoz v cloudu

  • MySQL: Spravované varianty (Amazon RDS/Aurora MySQL, Azure Database for MySQL, Google Cloud SQL). Aurora nabízí sdílené úložiště a rychlý failover.
  • PostgreSQL: Amazon RDS/Aurora PostgreSQL, Azure Database for PostgreSQL (Flex Server), Google Cloud SQL/AlloyDB. AlloyDB a Aurora rozšiřují možnosti výkonu a vysoké dostupnosti.
  • MS SQL: Azure SQL Database/Managed Instance, SQL ve virtuálních počítačích Azure; bohaté funkce PaaS (automatické zálohy, škálování, Hyperscale).

Zálohování a obnova

  • MySQL: mysqldump, mysqlpump, MySQL Enterprise Backup a fyzické snapshoty (LVM/ZFS). Obnova k určitému času je možná prostřednictvím opětovného přehrání binlogu.
  • PostgreSQL: pg_dump/pg_restore, base backup a archivy WAL, pgBackRest, barman; umožňuje přesnou obnovu k určitému okamžiku (PITR).
  • MS SQL: Úplné/diferenciální zálohy a zálohy transakčních protokolů, obnova pomocí tail-log, Recovery Models (Full/Bulk-Logged/Simple), nástroj DBCC pro kontrolu integrity.

Výkonové charakteristiky a typické úlohy

  • MySQL: Vyniká v úlohách OLTP s převahou čtení, jednoduchými schématy a krátkými transakcemi; široce se využívá v prostředích LAMP a e-commerce.
  • PostgreSQL: Univerzální databázový systém pro OLTP i pokročilejší analytiku nad transakčními daty (okna, CTE, JSONB, geografická data). Je dobrou volbou pro datově náročnější oblasti a rozšíření.
  • MS SQL: Silný v kombinovaných podnikových úlohách OLTP/OLAP; columnstore a integrace se sadou nástrojů Microsoft (Power BI, SSIS/SSAS) podporují smíšené úlohy.

Tabulkové srovnání klíčových vlastností

Oblast MySQL PostgreSQL MS SQL Server
Transakce/MVCC InnoDB, REPEATABLE READ, gap locks Čisté MVCC, AUTOVACUUM RCSI/SI, robustní locking
Pokročilé SQL CTE, okna (novější verze), funkce JSON Široká podpora, rekurzivní CTE, rozšíření Výkonný T-SQL, analytické funkce
Indexy B-tree, invisible, histograms B-tree, GIN/GiST/BRIN, partial/expression B-tree, columnstore, filtered
Particionace Na úrovni tabulek (range/list/hash) Deklarativní, široké možnosti Podniková úroveň, schemes/functions
Replikace/HA Asynchronní/semi-sync, Group Replication Streaming (synchronní/asynchronní), logical, Patroni Always On AG, FCI, log shipping
JSON/NoSQL prvky Typ JSON, generated columns JSONB + GIN, hstore JSON v textovém formátu + funkce
Rozšiřitelnost Omezenější Velmi vysoká (rozšíření, typy, jazyky) CLR, integrace s ekosystémem Microsoft
Licencování GPL (Community) / komerční (Enterprise) Open-source (PostgreSQL License) Komerční (podle počtu jader), Express/Dev zdarma
Analytika Základní (bez columnstore) Pokročilé funkce pro práci s okny, rozšíření (Timescale) Columnstore, SSAS/Power BI

Bezpečnostní a provozní standardy

  • Šifrování: Všechny tři systémy podporují TLS; TDE je nejpohodlnější v MS SQL (nativně), v PostgreSQL/MySQL je dostupné v závislosti na edici a nástrojích.
  • RLS a maskování: PostgreSQL (RLS) a MS SQL (RLS + DDM) nabízejí detailní kontrolu; v MySQL se přístup obvykle řídí na úrovni aplikace nebo prostřednictvím rolí a pohledů.
  • Audit: MS SQL nabízí podrobný nativní audit; PostgreSQL a MySQL využívají rozšíření a podnikové funkce.

DevOps, CI/CD a pozorovatelnost

  • Automatizace schémat: Migrační nástroje (Flyway, Liquibase) podporují všechny tři systémy; MS SQL navíc nabízí SSDT/DACPAC.
  • Monitoring: PostgreSQL (pohledy pg_stat_*, exportéry Prometheus), MySQL (performance_schema, sys), MS SQL (DMV, Query Store, Extended Events).
  • Testování výkonu: pgbench, sysbench a nástroje pro Replay v MS SQL; doporučuje se testovat s reálnými dotazy a daty.

Typické scénáře použití

  • MySQL: Webové aplikace, e-commerce, CMS, mikroslužby s převahou čtení, jednoduchá schémata a replikace binlogu.
  • PostgreSQL: Fintech, GIS, analytické OLTP, oblasti s komplexními datovými typy, datové platformy využívající rozšíření.
  • MS SQL: Podnikové aplikace postavené na .NET, ERP/CRM, hybridní OLTP/OLAP, potřeba columnstore a těsné integrace s nástroji BI v ekosystému Microsoft.

Poznámky k migraci a kompatibilita

  • MySQL ↔ PostgreSQL: Rozdíly v typech (SERIAL vs. IDENTITY/GENERATED), funkcích a chování hodnot NULL. Pomoci mohou nástroje pgloader, ora2pg (často také pro MySQL) a vlastní skripty.
  • MS SQL ↔ PostgreSQL: Odlišnosti mezi T-SQL a PL/pgSQL, TOP vs. LIMIT, identitní sloupce a sekvence; pomoci mohou migrační asistenti a most FDW.
  • MS SQL ↔ MySQL: Liší se datové typy (DATETIME2, NVARCHAR), chování transakcí a úrovní izolace; funkce je nutné přemapovat.

Kritéria výběru: jak zvolit správnou databázi

  1. Požadavky na SLA a HA: Potřebuji synchronní replikaci, více regionů, nulové RPO/RTO?
  2. Typ úloh: OLTP vs. HTAP/analytika; JSON/geo/časové řady; požadavky na okna/CTE.
  3. Ekosystém a dovednosti: Tým (.NET/Power BI → MS SQL; GIS/rozšíření → PostgreSQL; LAMP → MySQL).
  4. Licencování/TCO: Open-source vs. podnikové funkce; náklady na podporu.
  5. Cloudová strategie: Preferované spravované služby (Aurora, Azure SQL, AlloyDB) a jejich limity.

Doporučení podle priorit

  • Maximální flexibilita a otevřenost: PostgreSQL díky širokým možnostem rozšíření a standardnímu SQL.
  • Jednoduchost a rychlý start webových aplikací: MySQL (nebo MariaDB) se zavedenou replikací a nízkou režijní zátěží.
  • Podniková integrace, analytika a governance: MS SQL Server s columnstore, RLS/DDM a nástroji pro správu.

Závěr

MySQL, PostgreSQL a MS SQL Server poskytují spolehlivé jádro pro relační data, liší se však architekturou, mírou standardizace, rozšiřitelností a provozními vlastnostmi. Volbu by měla určovat kombinace obchodních požadavků (SLA, TCO), technických nároků (typ dat, analytika, škálování) a dostupných kompetencí v týmu. V praxi se často uplatní hybridní strategie: například PostgreSQL pro komplexní OLTP/analytiku, MySQL pro jednodušší webové služby a MS SQL pro aplikace v ekosystému Microsoft a náročné podnikové scénáře.