Na PostgreSQL databázi jsem řešil jeden drobný problém. Jak nejrychleji získat záznamy, které jsou obsažené v jedné tabulce a v druhé tabulce nejsou? Poznámka: Vše je samozřejmě korektně "oindexované". Mám dvě tabulky: A (1,7 milionu řádků), B (1,2 milionu řádků). Použil jsem tři přístupy:
1. EXCEPT (MINUS) - 160 sekund:
select x from A except select x from B
Poznámka: použil se 2x seq. scan.
2. LEFT JOIN - 65 sekund:
select a.x from A a left join B b on a.x = b.x where b.x is null
Poznámka: použil se seq. scan na tabulce B
3. NOT EXISTS - 65 sekund:
select x from A a where not exists (select 1 from B b where a.x = b.x)
Poznámka: Použil se stejný exekuční plán jako v pokusu č. 2.
4. NOT IN - tohle ani nedoběhlo :-)
select x from A a where (x) not in (select x from B b)
Poznámka: COST byl 135 trilionů :-), v nejrychlejší variantě (LEFT JOIN, NOT EXISTS) byl COST pouhých 300 tisíc.
Školení mi pomohlo ujasnit si jak má správně probíhat testování kódu, představilo užitečné knihovny a nástroje. Vše bylo podáno zábavnou formou, takže nebyl problém udržet pozornost. Navíc byl výhodou dostatek
Jedno z nejlepších školení za poslední roky. Kromě seznámení se Springem apod. mě velmi příjemně překvapila hluboká znalost probírané látky a schopnost ji srozumitelně vysvětlit v případě ad hoc dotazů.
Přestože jsem Cčkař, tak jsem se na školení JUnit dozvěděl nové věci. Zejména co se týče metodiky jednotkového testování a některých odborných termínů.