Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zagnieżdżone łączenie pętli w Oracle 11g

Spis treści

Co to jest  Zagnieżdżone łączenie pętli w Oracle

-Dla każdego wiersza w źródle pierwszego wiersza uzyskaj dostęp do wszystkich wierszy ze źródła drugiego wiersza.
-Złączanie zagnieżdżonych pętli jest operacją łączenia, która wybiera wiersz z wybranego źródła wiersza początkowego i używa wartości tego źródła wiersza wjechać lub wybrać z połączonego źródła wiersza, szukając pasującego wiersza.
-Najlepsze dla transakcji typu OLTP
-najszybciej, jeśli wiersze zwrócone z pierwszej tabeli są małe

-Nested Loop Join w Oracle 11g działa inaczej. Szczegółowe informacje na ten temat znajdują się w tym artykule

jak zagnieżdżone łączenie pętli działa w Oracle

- Optymalizator Oracle najpierw określa tablicę kierującą i wyznacza ją jako pętlę zewnętrzną. Jest to źródło rzędu sterującego. Tworzy zestaw wierszy do sterowania warunkiem połączenia. Źródłem wiersza może być tabela, do której dostęp uzyskuje się za pomocą skanowania indeksu lub pełnego skanowania tabeli. Rzędy można również wyprodukować z dowolnej innej operacji. Na przykład dane wyjściowe z zagnieżdżonego łączenia pętli mogą być użyte jako źródło wiersza.
-Optymalizator wyznacza inną tabelę jako pętlę wewnętrzną. Jest to powtarzane dla każdego wiersza zwróconego z pętli zewnętrznej. Jest to operacja dostępu do tabeli i idealnie powinna być skanowaniem indeksu.
-Operacja wykonywana przez tabelę INNER jest powtarzana dla każdego wiersza zwróconego w tabeli OUTER

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

Przykład łączenia w pętlę zagnieżdżoną

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 to jest przetwarzane

(1) Odczytaj pierwszy wiersz w DEPT
(2) Wykonaj skanowanie indeksu w EMP_N1 w celu dopasowania dept_no i uzyskaj pierwszy wierszid
(3) Poszukaj wiersza, do którego istnieje odwołanie w EMP i dołącz do informacji oraz podaj wyjście
(4) Powtórz operację 2,3 dla każdego zwróconego wiersza
(5) Powtórz operację 1,2,3,4 dla wszystkich wierszy w DEPT

for x in (wybierz z działu tabeli)
pętla
dla wiersza w (wybierz z tabeli emp )
pętla
zwracane są połączone wiersze wyjściowe, gdy warunek jest spełniony
koniec pętla
zakończ pętlę

Tutaj metoda dostępu do select from table emp polegałaby na skanowaniu indeksu
Jeśli optymalizator wybierze inną metodę łączenia, możesz użyćpodpowiedzi USE_NL(A B), gdzie A i B sąaliasami tabel dołączanie.

Obliczenia kosztów
W łączeniu NESTED LOOPS dla każdego wiersza w zewnętrznym zestawie wierszy uzyskuje się dostęp do wewnętrznego zestawu wierszy w celu znalezienia wszystkich pasujących wierszy do połączenia. Dlatego w tego typu sprzężeniu dostęp do wewnętrznego zestawu wierszy jest uzyskiwany tyle razy, ile jest wierszy w zewnętrznym zestawie wierszy.
Koszt :koszt dostępu do tabeli A + liczba wierszy zwróconych z tabeli A X koszt dostępu do tabeli B

Będzie to więc opłacalne, jeśli małe wiersze są zwracane z tabeli zewnętrznej, a operacja dostępu do tabeli wewnętrznej odbywa się poprzez unikalne skanowanie lub skanowanie małego zakresu indeksów

Nowa metoda łączenia zagnieżdżonych pętli w Oracle 11g

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

Dokumentacja Oracle mówi o tym
Gdy indeks lub blok tabeli nie znajduje się w buforze pamięci podręcznej i jest potrzebny do przetworzenia złączenia, wymagane jest fizyczne wejście/wyjście. W Oracle Database 11g Release 1 (11.1), Oracle Database może grupować wiele fizycznych żądań we/wy i przetwarzać je przy użyciu wektorowych we/wy zamiast przetwarzać je pojedynczo. W ramach nowej implementacji złączeń zagnieżdżonych w pętli w planie wykonania mogą pojawić się dwa źródła wierszy złączeń zagnieżdżonych, z których w poprzednich wersjach pojawiało się tylko jedno. W takich przypadkach Oracle Database przydziela jedno źródło wiersza złączenia NESTED LOOPS, aby połączyć wartości z tabeli po zewnętrznej stronie złączenia z indeksem po stronie wewnętrznej. Drugie źródło wiersza jest przydzielane do łączenia wyniku pierwszego łączenia, które obejmuje wiersze przechowywane w indeksie oracle, z tabelą po wewnętrznej stronie łączenia”

Zewnętrzne złącze zagnieżdżonych pętli w Oracle

-Podobne do zagnieżdżonej pętli
-Wiersze zwracane, nawet jeśli wewnętrzna pętla nie ma żadnych wierszy spełniających kryteria
-W przeciwieństwie do zagnieżdżonej pętli, która może być sterowana z którejkolwiek z tabel, jest to połączenie w jedną stronę
a =b(+) zawsze przejdzie do a przed b, może to skutkować droższym planem (prawdopodobnie innym niż NL)
(+) zawsze idzie na stronę niedoborów

Też czyta
Hash Join
Metoda łączenia w Oracle
https://en.wikipedia.org/wiki/Nested_loop_join


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcja INSERT w Oracle

  2. Zupełnie nowa baza danych produkcyjnych

  3. Korzystając z Oracle, połącz trzy tabele w jedną za pomocą PIVOT

  4. Jak reprezentować interwał Oracle w Javie

  5. Jak znaleźć zablokowane wiersze w Oracle