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

Nested Loop Join v Oracle 11g

Obsah

Co je  Neted Loop Join v Oracle

-Pro každý řádek ve zdroji prvního řádku získáte přístup ke všem řádkům ze zdroje druhého řádku.
-Připojení NESTED LOOPS je operace spojení, která vybere řádek z vybraného zdroje počátečního řádku a použije hodnoty tohoto zdroje řádků. pro najetí nebo výběr ze zdroje spojených řádků při hledání shodného řádku.
-Nejlepší pro transakce typu OLTP
-Bude nejrychlejší, pokud jsou řádky vrácené z první tabulky malé

– Nested Loop Join v Oracle 11g funguje odlišně. Podrobnosti o tom jsou uvedeny v tomto článku

jak funguje spojení vnořené smyčky v oracle

-Optimalizátor oracle nejprve určí řídicí tabulku a označí ji jako vnější smyčku. Toto je zdroj řídicích řádků. Vytváří sadu řádků pro řízení podmínky spojení. Zdrojem řádků může být tabulka přístupná pomocí indexového skenování nebo úplného prohledávání tabulky. Řady mohou být vyrobeny z jakékoli jiné operace. Například výstup ze spojení Nested Loop Join lze použít jako zdroj řádků.
-Optimalizátor označí jinou tabulku jako vnitřní smyčku. To je iterováno pro každý řádek vrácený z vnější smyčky. Toto je operace přístupu k tabulce a v ideálním případě by to mělo být skenování indexu.
-Operace prováděná VNITŘNÍ tabulkou se opakuje pro každý řádek vrácený ve VNĚJŠÍ tabulce

for x in (select from outer table)
loop
for row in (select from inner table )
loop
joined output rows is returned where condition is matched
end loop
end loop

Příklad spojení vnořené smyčky

select /* +use_nl( a b) */ a.emp_no,b.dept_no,b.dept_name from emp a,dept b where a.dept_no=b.dept_no;
SELECT STATEMENT
NESTED LOOP
TABLE ACCESS FULL DEPT
TABLE ACCESS BY INDEX ROWID EMP
INDEX RANGE SCAN EMP_N1

Jak se zpracovává

(1) Přečtěte si první řádek v DEPT
(2) Proveďte indexové skenování na EMP_N1 pro shodu dept_no a získejte první rowid
(3) Vyhledejte odkazovaný řádek v EMP a připojte informace a poskytněte výstup
(4) Opakujte operaci 2,3 pro každý vrácený rowid
(5) Opakujte operaci 1,2,3,4 pro všechny řádky v DEPT

for x in (výběr z oddělení tabulky)
loop
pro řádek v (výběr z tabulky emp )
loop
vrátí se spojené výstupní řádky, kde je splněna podmínka
end smyčka
ukončit smyčku

Zde by přístupová metoda pro výběr z tabulky emp byla přes index scan
Pokud se optimalizátor rozhodne použít jinou metodu spojení, můžete použít nápovědu USE_NL(A B), kde A a B jsou aliasy tabulek. se připojují.

Výpočty nákladů
Ve spojení NESTED LOOPS je pro každý řádek v sadě vnějších řádků přístup k sadě vnitřních řádků, aby se našly všechny odpovídající řádky ke spojení. Proto je u tohoto typu spojení vnitřní sada řádků přístupná tolikrát, kolikrát je počet řádků ve vnější sadě řádků.
Cena :náklady na přístup k tabulce A + počet řádků vrácených z tabulky A X náklady na přístup k tabulce B

Bude to tedy nákladově efektivní, pokud se z vnější tabulky vrátí malé řádky a operace přístupu k vnitřní tabulce bude probíhat prostřednictvím jedinečného skenování nebo skenování malého rozsahu indexů

Nová metoda pro spojení Nested Loop Join v Oracle 11g

SELECT STATEMENT
NESTED LOOPS
NESTED LOOPS
TABLE ACCESS FULL DEPT
INDEX UNIQUE SCAN EMP_IDX
TABLE ACCESS BY INDEX ROWID EMP

Dokumentace Oracle to říká
Pokud index nebo blok tabulky není ve vyrovnávací paměti a je potřeba ke zpracování spojení, je vyžadován fyzický I/O. V Oracle Database 11g Release 1 (11.1) může Oracle Database dávkovat více fyzických I/O požadavků a zpracovávat je pomocí vektorového I/O namísto zpracování jednoho po druhém. Jako součást nové implementace pro spojení vnořených smyček se mohou v plánu provádění objevit dva zdroje řádků spojení NESTED LOOPS, kde by se v předchozích verzích objevil pouze jeden. V takových případech Oracle Database přidělí jeden zdroj řádků spojení NESTED LOOPS ke spojení hodnot z tabulky na vnější straně spojení s indexem na vnitřní straně. Zdroj druhého řádku je přidělen ke spojení výsledku prvního spojení, který zahrnuje rowids uložené v indexu oracle, s tabulkou na vnitřní straně spojení”

Vnější spojení Nested Loops v Oracle

-Podobné jako vnořená smyčka
-Řádky se vrací, i když vnitřní smyčka nemá žádné řádky splňující kritéria
-Na rozdíl od vnořené smyčky, která může být řízena z kterékoli z tabulek, je to jednosměrné spojení
a =b(+) vždy půjde do a před b, to může mít za následek dražší plán (možná mimo NL)
(+) vždy jde na straně nedostatků

Také čte
Hash Join
Metoda připojení v Oracle
https://en.wikipedia.org/wiki/Nested_loop_join


  1. Úvahy o výkonu spravované instance Azure SQL

  2. Jak používat příkaz Alter Table v SQL?

  3. Vytvářejte soubory PDF pomocí PLSQL v Oracle

  4. Jak zrušit všechny uživatelské tabulky?