Jak nejrychleji získat záznamy, které jsou obsažené v jedné tabulce a v druhé tabulce nejsou

publikováno: 11.6.2016

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.

Předchozí:
SQL Server na Linuxu
Následující:
Oracle XE 11g Docker
Reference

Š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

Ondřej

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ě

Robert

Zajímavé školení, které vhodně kombinovalo teorii a praxi.

Ministerstvo financí
Jan


Novinky

22.3.2019: Termíny SQL školení léto 2019
Nové termíny!!!

3.1.2018: Oracle XE 12c nebude, místo toho bude Oracle XE 18c
V roce 2018 nás čeká nová XE verze a nové verzování

4.4.2017: SAP HANA & Veverka (SQuirrel SQL)
Oficiální SAP HANA studio funguje, ale je hrozně pomalé. Další z nástrojů, kde je možné rozchodit SAP HANA je Veverka (SQuirrel SQL)