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í bych doporučil všem lidem, kteří se chtějí dozvědět něco o DB. Na školeni jsem přišel, jako úplný nováček, co se týče práci s DB a odcházel plný dojmů a
Osobně jsem trošku stále váhající, jestli a jak moc SQL použít. Ale určitě hlavní je to, že se teď už tolik nebojím. Je to pro mě začátek dlouhé cesty. Osobně
Zajímavé školení, které vhodně kombinovalo teorii a praxi.