Hlavní navigace

Názor k článku PostgreSQL 14: nové funkce, nástroje a interní optimalizace od Pavel Stěhule - Existují univerzální testy - TPC-B, TPC-H, které můžete...

  • Článek je starý, nové názory již nelze přidávat.
  • 21. 5. 2021 9:01

    Pavel Stěhule

    Existují univerzální testy - TPC-B, TPC-H, které můžete pustit vůči libovolné SQL databázi. Předpokládám, že v TPC-B bude mít MySQL navrch, a v TPC-H zas bude mít navrch Postgres. V reálném světě asi minimum aplikací budou generovat zátěž podobnou záteži generované těmito syntetickými testy.

    Když znám MySQL a znám PostgreSQL, tak samozřejmě dokáži vymyslet test, ve kterém bude MySQL 10x rychlejší než Postgres, a zrovna tak dokáži vymyslet test, kde bude Postgres 10x rychlejší než MySQL. Nicméně, když znám obě databáze, tak také dokážu se vyhnout slabým stránkám MySQL a dokáži se vyhnout slabým stránkám Postgresu. Případně dokáži v aplikaci použít obě databáze, abych využil silné stránky obou databází.

    MySQL má jednodušší optimalizátor, stejně tak má relativně hloupé statistiky, a až do verze 8.0 i hloupý executor (interpret jazyka prováděcích plánů). Interpret uložených procedur také není extra rychlý (a až do verze 8.0 postrádal i relativně základní funkce). Tudíž komplexnější dotazy, které vrací větší počet řádků na větších datech budou na MySQL pomalé (aplikačně budou ještě pomalejší). Ale InnoDB tabulky jsou uspořádané podle primárního klíče. V podstatě InnoDB tabulka je indexem nad primárním klíčem. Díky tomu všechny operace nad primárním klíčem budou v InnoDB výrazně rychlejší než nad pg. Pokud potřebujete jen transakční storage, a neděláte reporting, tak MySQL poslouží špičkově.

    Postgres je defacto pravý opak. Postgresové tabulky nejsou organizované podle primárního klíče. Tudíž operace nad primárním klíčem budou vždy pomalejší než v MySQL. Ale má chytřejší optimalizátor, chytřejší statistiky, uložené procedury jsou naprosto jiná liga, má chytřejší datové typy. V postgresu mohu dost výpočtů udělat na úrovni db, a nemusím data stěhovat po síti, provádět konverze, atd.

    A když toto vím, tak tomu mohu přizpůsobit návrh aplikace nebo volbu databáze, nebo volbu testů. Pro některé aplikace se hodí víc Postgres, a pro jiné MySQL, a někdo preferuje styl a strategii, která vyhovuje MySQL, a někde jiný ho dost nemusí.