Pokud bych extrémně zjednodušil situaci na pouze read-only přístup, tak lze orientačně počítat s tím, že u jednoduchých SQL dotazů bude MySQL cca o 1/3 rychlejší (v průměru TPC-B test), případně několika násobně pomalejší (raw SELECT) u nudloidních tabulek. S vyšší složitostí dotazů klesá rychlost MySQL a roste rychlost dotazů u PostgreSQL. U složitějších dotazů může být PostgreSQL několikanásobně rychlejší - při použití pohledů, poddotazů. PostgreSQL má oproti MySQL složitější "formát" pro ukládání dat na disk + nějaká režie, a komplexnější planner - v PostgreSQL je větší nabídka vestavěných algoritmů pro JOIN, pro poddotazy - hlavně je tam hasjoin a hashagg, umí lépe používat víc indexů v jednom dotazu. MySQL s InnoDB používá clustrovaný index, s MyISAM zase extrémně jednoduchý formát na disku. MySQL je dlouhodobě optimalizováno na jednoduché dotazy, PostgreSQL je zase dlouhodobě optimalizovano na složitější dotazy - takže záleží, kde se nacházíte. Při testování, kterého jsem se účastnil a kde se porovnával výkon 5.5 a 9.1 v nejhorších případech (pro pg) byl pg 2x pomalejší, v jiných byl naopak 5x 10x rychlejší - databáze na kterých se testovalo byly něco mezi 5-11G. Z testů se ukazuje, že je pro dlouhodobé uživatele MySQL minimálně zajímavé důkladněji otestovat chování a výkon aplikací v PostgreSQL - minimálně ten zákazník, který platí testování, tak do PostgreSQL jde.
Pokud se neomezíme jen na read-only přístup, tak je situace zase složitější. PostgreSQL se nehodí na ukládání krátkodobých netransakčních dat - tj. data, která třeba po půl hodině smažeme - na druhou stranu se PostgreSQL docela dobře vyrovná s komplexnějším multiuživatelským přístupem - většinou lépe než MySQL - takže opět záleží co děláte. V PostgreSQL už je několik let group commit, který se do MySQL teprve přidává - tím se docela dost snižuje zátěž systému a volná kapacita může přispět k vyšší rychlosti dotazů. Prostě ohledně výkonu není univerzální vítěz - každá databáze je lepší v té oblasti pro kterou je dlouhodobě optimalizovaná.
Pokud vím, tak v MySQL je mnohem širší paleta replikačních modelů. Teď si nejsem jistý, jestli to už má 5.5 - MySQL by mělo obsahovat thread-pooling - což by mělo zajistit lepší chování v ms-win při velkém počtu souběžně připojených uživatelů (v PostgreSQL se musí řešit externí aplikací - pgpool nebo bucardo). Jinak ve všem ostatním (si myslím,- je to můj názor, který tu jen prezentuji, ale nikomu nevnucuji) je PostgreSQL dál než MySQL - komfort pro vývojáře, administrátory, nabídce datových typů, rozšiřitelnosti, podpoře geodat, v uložených procedurách.
MySQL hodně ztratila bitvou s Oraclem (poté co Oracle koupil InnoDB). Zase dneska existuje několik týmů, které se snaží optimalizovat výkon MySQL - v Googlu, ve Facebooku, v Perconě, v Oraclu (dost často jsou to lidé z původní MySQL a.b) - těm jde ale primárně o surový výkon elemntárních dotazů a monitoring a o nic jiného. A pár malých firmiček se snaží uspět se specializovanými engines - do low level optimalizace MySQL se asi dost investuje - hodně firem je na MySQL životně závislá a aktuálně není situace ohledně MySQL nijak zvlášť přehledná. PostgreSQL jde trochu jinou cestou - spíš než na web se orientuje na vnitropodnikové IS, telco, finance nebo embeded databáze u náročnějšího hw - rengeny, ústředny, ..
kdyz to shrnu pro jakykoliv slozitejsi datovy model a slozitejsi datovou vrstvu je lepsi postgres,zvlast od verze 9 sleduji i narust vykonu, coz u mysql od verze k verzi je horsi. Navic se pridaly problemy se zavislostmi, kterou mysql nepekne resi, napr. uznam ze chybe v navrhu triggeru jsem odstrelil celou tabulku jen protoze jsem jinou smazal... a tech veci tam bylo vic..
nelze stavet na tom ze nikdo pri vyvoji funkci a celkovem navrhu neudela chybu, z toho pohledu je pro me Mysql doslova nebezpecna databaze pri slozitejsi architekture
kdyz to shrnu pro jakykoliv slozitejsi datovy model a slozitejsi datovou vrstvu je lepsi postgres,zvlast od verze 9 sleduji i narust vykonu, coz u mysql od verze k verzi je horsi. Navic se pridaly problemy se zavislostmi, kterou mysql nepekne resi, napr. uznam ze chybe v navrhu triggeru jsem odstrelil celou tabulku jen protoze jsem jinou smazal... a tech veci tam bylo vic..
nelze stavet na tom ze nikdo pri vyvoji funkci a celkovem navrhu neudela chybu, z toho pohledu je pro me Mysql doslova nebezpecna databaze pri slozitejsi architekture