sql >> Databáze >  >> RDS >> Oracle

Je anti-spojení účinnější než levé vnější spojení?

Když ve svém dotazu SQL použijete „neexistuje“ nebo „není v“, umožníte společnosti Oracle, aby zvolila přístupové cesty proti spojení sloučením nebo hashováním.

Rychlé vysvětlení

Například při daném spojení mezi tabulkou A a B (z A spojení B na A.x =B.x) Oracle načte všechna relevantní data z tabulky A a pokusí se je porovnat s odpovídajícími řádky v tabulce B, takže je přísně závislý na selektivitě tabulky. Predikát.

Při použití anti-join optimalizace může Oracle vybrat tabulku s vyšší selektivitou a spárovat ji s druhou, což může vést k mnohem rychlejšímu kódu.

Nemůže to udělat s běžným spojením nebo poddotazem, protože nemůže předpokládat, že jedna shoda mezi tabulkami A a B stačí k vrácení tohoto řádku.

Související tipy: HASH_AJ, MERGE_AJ.

Další:

Toto vypadá to na pěkný a podrobný článek na toto téma.

Zde je další, výstižnější článek.



  1. Dostávám prázdnou tabulku html/jsp bez extrahovaných dat

  2. Nastavení tabulky zeměpisné šířky a délky v MySQL

  3. Změna ORDER BY z id na jiný indexovaný sloupec (s nízkým LIMIT) má obrovské náklady

  4. Co se stane, když připojení MySQL na stránkách PHP neustále nejsou uzavřena?