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

Hash join w Oracle z przykładem

Spis treści

Co to jest hash Join w Oracle?

Sprzężenia mieszające są używane, gdy łączysz duże tabele lub gdy złączenia wymaga większości połączonych wierszy tabel. Jest to używane tylko do połączeń równościowych

Algorytm łączenia Oracle Hash

1) Optymalizator używa mniejszej z dwóch tabel do zbudowania tablicy mieszającej w pamięci. Mała tablica nazywa się tablicą kompilacji

Faza budowy

Dla każdego wiersza w małej pętli tabeli
Oblicz wartość skrótu klucza sprzężenia
Wstaw wiersz w odpowiednim zasobniku skrótu.
Zakończ pętlę;

2) następnie skanuje duże tabele i porównuje wartość skrótu (wierszy z dużej tabeli) z tą tabelą, aby znaleźć połączone wiersze. Duża tabela nazywana jest tabelą sond

Faza sondy

Dla każdego wiersza w pętli dużej tabeli
Oblicz wartość skrótu klucza sprzężenia
Sprawdź tabelę skrótu pod kątem wartości skrótu
Jeśli znaleziono dopasowanie
Zwróć wiersze
Zakończ pętlę;

Powyższe wyjaśnienie jest prawdziwe, gdy rozwijana tablica mieszająca mieści się całkowicie w pamięci. Jeśli tablica mieszająca jest zbyt duża, aby zmieścić się w dostępnej pamięci, Oracle wykonuje przetwarzanie w nieco inny sposób.
Zasadniczo, jeśli tablica mieszająca jest zbyt duży, aby zmieścić się w dostępnej pamięci Oracle ma mechanizm zapisywania go na dysku w partiach (zwanych partycjami) i zapisywania tabeli sond na dysku w pasujących partiach, a następnie mądrze łączy elementy między pasującymi partiami

Zasadniczo, gdy obszar haszowania się zapełni, Oracle będzie wymagało użycia obszaru tabel TEMP. Oracle wybierze największą partycję z haszem i zapisze ją w TEMP.Oracle przechowuje w pamięci indeks podobny do bitmapy całej tabeli mieszania. Ten indeks wie tylko, że dla danego zbioru haszującego (lokalizacja w tabeli haszującej) istnieje lub nie ma wartości. Ale indeks nie ma rzeczywistej wartości.

Dlatego jeśli wiersz z drugiej lub sondującej tabeli haszuje do jednej z tych lokalizacji, wiadomo tylko, że istnieje potencjalna zgodność. Proces budowania tablicy mieszającej trwa do zakończenia całej tablicy mieszającej. Część tablicy mieszającej jest w pamięci, a część na dysku

Teraz Oracle zaczyna czytać sondę lub inną tabelę i zaczyna tworzyć skrót klucza łączenia. Jeśli klucz skrótu pasuje do skrótu w pamięci, łączenie jest zakończone i zwracany jest wiersz. Jeśli wiersz jest potencjalnym dopasowaniem, wtedy oracle zapisze ten wiersz w obszarze tabel TEMP w tym samym schemacie partycjonowania, w którym były przechowywane dane pierwszego wiersza.

Po zakończeniu pierwszego przejścia całej tabeli pomocniczej i podaniu wszystkich wierszy w tabeli mieszania w pamięci, Oracle rozpocznie wyszukiwanie pasującej partycji na dysku i przetworzy każdą partycję po kolei i odczyta wiersze w pamięci i przetworzyć wynik

Hash dołącz do Oracle Przykład:

select /* +use_hash( a b) */ a.emp_no,b.dept_no,b.dept_name from emp a,dept b where a.dept_no=b.dept_no;
Plan
-------------------------------------------------
SELECT STATEMENT
HASH JOIN
TABLE ACCESS FULL EMP
TABLE ACCESS FULL DEPT

Jak przetwarzane jest dołączenie haszujące w Oracle
1) Pierwsza tabela EMP jest skanowana i haszowana
2) Tabela dept jest skanowana dla każdego wiersza i tworzony jest hash dla połączenia z zachowaniem dept_no
3) hash dept_no jest dopasowany w tabeli hash , jeśli zostanie znalezione dopasowanie , zwracane są połączone wiersze

Podpowiedź łączenia haszującego Oracle

Firma Oracle udostępniła wskazówkę use_hash, aby wymusić użycie łączenia haszującego.

Usage

select /* +use_hash(table alias) */ ......

To mówi optymalizatorowi, że metoda łączenia, która ma być użyta, gdy „alias_tabeli” jest źródłem następnego wiersza w kolejności łączenia, powinna być łączeniem mieszającym; jednak nie mówi optymalizatorowi, czy źródło wiersza powinno być użyte jako tabela kompilacji czy tabela sond.

Aby określić, w jaki sposób używane jest źródło wiersza, potrzebujesz drugiej wskazówki:no_swap_join_inputs („alias_tabeli”), jeśli Oracle ma używać źródła wierszy jako tabeli sondy, lub swap_join_inputs („alias_tabeli”), jeśli chcesz, aby firma Oracle używała go jako kompilacji stół

Kilka ważnych punktów dotyczących łączenia haszującego w Oracle

1)Wyjście wyniku łączenia mieszającego nie jest natychmiastowe, ponieważ łączenie mieszające jest blokowane podczas tworzenia tablicy mieszającej.Po zakończeniu budowy tablicy mieszającej wiersze są zwracane szybciej
2)połączenia mieszające są często spotykane w optymalizatorze ALL_ROWS tryb, ponieważ działa na modelu wyświetlania wyników po zahaszowaniu wszystkich wierszy przynajmniej jednej z tabel w tablicy mieszającej.
3) Tablica mieszająca jest prywatną pamięcią, więc dostęp do danych nie wiąże się z dużą aktywnością zatrzaskiwania

Koszt połączenia mieszającego =Koszt odczytu tabeli A +koszt odczytu tabeli B + trochę przetwarzania w pamięci

Różnica między zagnieżdżoną pętlą a sprzężeniem mieszającym

Połączenie haszujące Połączenie zagnieżdżone
Łączenia haszujące są używane, gdy łączysz duże tabele lub gdy łączenia wymagają większości połączonych wierszy tabel. Jest to używane tylko do łączenia równości Złączanie zagnieżdżonych pętli to operacja łączenia, która wybiera wiersz z wybranego źródła wiersza początkowego i używa wartości tego źródła wiersza do kierowania do lub wybierania z połączonego źródła wiersza w poszukiwaniu pasującego wiersza.
-Najlepsze dla transakcji typu OLTP
Operacja skrótu jest zwykle wydajna dla dwóch zestawów danych, gdy zwracanych jest wiele rekordów. Gdy jeden zestaw danych nie ma lub nie ma zwróconej liczby rekordów, a inny zestaw danych można dopasować za pomocą operacji indeksowania, łączenie zagnieżdżonych pętli jest bardziej wydajne
Możesz zobaczyć więcej łączeń haszujących używanych w trybie optymalizatora ALL_ROWS, ponieważ działa on na modelu wyświetlania wyników po zahaszowaniu wszystkich wierszy co najmniej jednej tabeli w tabeli haszującej. Większe użycie pętli zagnieżdżonej będzie widoczne podczas korzystania z trybu optymalizatora FIRST_ROWS, ponieważ działa on na modelu pokazującym natychmiastowe wyniki użytkownikowi podczas ich pobierania. Nie ma potrzeby wybierania buforowania jakichkolwiek danych przed ich zwrotem do użytkownika. W przypadku łączenia haszowego jest to potrzebne i jest wyjaśnione poniżej.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić dane bezpośrednio z Excela do bazy danych Oracle

  2. Pytania do rozmowy kwalifikacyjnej Oracle

  3. Upuszczanie połączonych użytkowników w bazie danych Oracle

  4. Jak uzyskać kolumnę klucza podstawowego w Oracle?

  5. Samozadowolenie prowadzi do:Ryzyko staje się rzeczywistością