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
- Požadavky na SLA a HA: Potřebuji synchronní replikaci, více regionů, nulové RPO/RTO?
- Typ úloh: OLTP vs. HTAP/analytika; JSON/geo/časové řady; požadavky na okna/CTE.
- Ekosystém a dovednosti: Tým (.NET/Power BI → MS SQL; GIS/rozšíření → PostgreSQL; LAMP → MySQL).
- Licencování/TCO: Open-source vs. podnikové funkce; náklady na podporu.
- 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.
