Kdo mate zkusenosti s temito databazemi, co preferujete? Ja jsem z postgres ponekud rozcarovan, delamv nem uz 2 roky a je tam hodne bugu v query planneru - musi se to porad nejak workaroundovat. S MariaDB jsem zatim moc nedelal. A SQL Serverem jsem delal jen na VS, ale tipuju, ze to bude asi bude fungovat velice dobre.
Je tady nekdo kdo ma zkusenosti s Postgres a jeste s nejakou jinou z techto 2 databazi?
Nejvíc zkušeností mám samozřejmě s Postgresem, ale znám i obě druhé databáze. U MySQL se dá mluvit o kvalitnějším planneru až od 8čky, zrovna tak implementaci joinů. U komplikovanějších dotazů na trochu větších datech může být Postgres 10x rychlejší (všimněte si, kolik nových věcí v MySQL 8 je napsáno podle Postgresu). Na druhou stranu MySQL má jednodušší planner a index optimized tables (tabulky jsou organizované podle primárního klíče). Tudíž triviální dotazy, které jdou přes primární klíč, jsou u MySQL rychlejší. MySQL má také jinak reference v indexech, díky čemuž je u MySQL výrazně rychlejší UPDATE, pokud je nad modifikovanou tabulkou hodně indexů (vyšší desítky).
Postgresu vyhovuje dobře normalizované databázové schéma - je to hodně klasická relační databáze, která je ale silná díky extenzím, a bohaté nabídce práce s daty. XML, JSON, HStore, PostGIS - tam si myslím, že je nabízí komfort srovnatelný s Oraclem, a v drtivé většině případů podobný výkon (v OLTP). Vůči MySQL má výrazně pohodlnější, bohatší SQL s větší shodou se standardem, ale na to aby to člověku k něčemu bylo, tak je potřeba umět SQL. Navíc umí věci, které běžně ostatní os db neumí - např. více sloupcové statistiky, speciální indexy - pro GIS, pro LIKE, Dávno před Oraclem, a MS Postgres uměl podmíněné indexy. Roky umí Postgres použít víc indexů nad jednou tabulkou, atd - na druhou stranu MySQL má náskok v replikacích - v multimasteru - má to dost omezení (ale to je v ok v duchu MySQL), ale na eshopy to stačí. Pro Postgres zatím žádné multimaster řešení není tak etablované. Zase naopak vestavěná primary-hot standby replikace je výrazně lepší než to, co nabízí MySQL (možná něco podobného má komerční Enterprise MySQL). Command line nástroje jsou výrazně lepší u Postgresu (např. exportované CSV je skutečné CSV, a ne něco, co se CSV někdy podobá). MySQL má naopak propracovaný MySQL workbench. Postgres je komunitní sw (vývoj není soustředěný v jedné firmě). U MySQL nebo MariaDB je vývoj naopak centralizovaný.
MS SQL je relativně starý produkt doplněný o pěkné technologie pro OLAP - paměťový column store, .. MSSQL má svoje SQL (vychází to z Sybase, a je to zajímavý mix SQL a procedurálního kódu). Je to poměrně old school - mimo ANSI/SQL - a je to hodně vzdálené Oracle (naopak Postgres je z relačních databází Oracle nejblíž - syntaxí, stylem). Postgres má lepší SQL, modernější a o vesmír lepší uložené procedury. MSSQL naopak optimalizovat některé konstrukce - umí push aggregate, umí procpat predikáty skrze funkce. Microsoft SQL má dobré GUI a výborné datové pumpy. Postgres je UNIX databáze, a perfektně zapadá do Linuxu. Naopak MS SQL je odjakživa Win db (poslední 2 roky je i pro Linux, ale teď se Linuxové verzi nemluví). A Microsoft si vytunil SQL pro Win a Win pro SQL. Nicméně neslyšel jsem, že by byl Postgres (v OLTP) výrazně pomalejší než MS SQL. Záleží dotaz od dotazu.
U všech nových databází je optimalizace postavená na odhadech výsledku dotazu. Pokud se odhad povede (tak v 70%), tak MSSQL a Postgres a možná nový MySQL 8 budou dávat data plus mínus stejně rychle - čekáte buďto na IO nebo na RAM. Pokud se odhad nepovede - moc nebo málo, tak ten výkon může být dost tragický. Jelikož je to postavené na heuristikách, a různě nastavených konstantách, tak každá databáze má trochu jinak odhady, a tudíž dobře a špatně optimalizuje jiné dotazy. Jinak storage je ve všech případech MVCC. A jelikož typický programátor ví o db plus mínus prd, tak se přetlačuje s optimalizátorem, místo toho, aby se snažil umožnit db mít správné odhady - případně podepřít dotazy správnými indexy (což taky programátoři moc nedávají - bo neumí číst prováděcí plány (takže neví, kam dát index), a typicky znají jen jednoduchý a složený index, a tím končí.