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

Kurz SQL byl jedním slovem výborný. Připravená smysluplná databáze spolu s příklady, včetně příkladů s vysokou obtížností - je tak možné dostatečně zabavit i pokročilejší studenty. Za pozitivní považuji opravdu

Michal

Školení bylo super, zopakoval jsem si základy a také se dozvěděl spoustu nového ohledně SQL. Obrovské plus bylo v přátelském přístupu školícího.

Vít

Se školením jsem nadmíru spokojen, nejen že je výklad formou, která zaujme, ale i lajk se v tom neztrácí a je schopen pochopit i těžší úlohy.

Miloš


Novinky

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)

25.3.2017: SAP HANA referenční příručky
V současnosti je trošku složitější najít na webu referenční příručku k SAP HANA SQL, proto sem dávám odkazy.