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

SQL i PL/SQL jsem znal už před kurzem, ale příklady a vysvětení mi pomohlo trošku lépe pochopit, jak to funguje. Navíc i přesto, že jsem už s SQL a MySQL

Lukáš

týdenní školení proběhlo podle našich očekávání, super přístup i poskytnuté informace o PL/SQL

Nicole


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.