Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hash bergabung di Oracle dengan contoh

Daftar Isi

Apa itu hash Join di Oracle?

Gabungan hash digunakan saat menggabungkan tabel besar atau saat gabungan membutuhkan sebagian besar baris tabel yang digabungkan. Ini digunakan hanya untuk persamaan gabungan

Algoritma untuk Oracle Hash Join

1) Pengoptimal menggunakan yang lebih kecil dari 2 tabel untuk membangun tabel hash di memori. Tabel kecil disebut tabel build

Fase pembuatan

Untuk setiap baris dalam loop tabel kecil
Hitung nilai hash pada kunci gabungan
Sisipkan baris dalam keranjang hash yang sesuai.
End loop;

2) kemudian memindai tabel besar dan membandingkan nilai hash (baris dari tabel besar) dengan tabel hash ini untuk menemukan baris yang digabungkan. Tabel besar disebut tabel probe

Fase Penyelidikan

Untuk setiap baris dalam loop tabel besar
Hitung nilai hash pada kunci gabungan
Selidiki tabel hash untuk nilai hash
Jika kecocokan ditemukan
Kembalikan baris
Akhiri loop;

Penjelasan di atas benar ketika tabel hash yang sedang dikembangkan cocok sepenuhnya di memori. Jika tabel hash terlalu besar untuk muat di memori yang tersedia, maka Oracle melakukan pemrosesan dengan cara yang sedikit berbeda.
Pada dasarnya jika tabel hash adalah terlalu besar untuk ditampung dalam memori yang tersedia Oracle memiliki mekanisme untuk menyimpannya ke disk dalam batch (disebut partisi) dan menyimpan tabel probe ke disk dalam batch yang cocok, kemudian melakukan bagian gabungan antara batch yang cocok

Pada dasarnya ketika area hash terisi, Oracle akan perlu menggunakan tablespace TEMP. Oracle akan memilih partisi terbesar dengan hash dan menulisnya ke TEMP. Oracle menyimpan indeks seperti bitmap dari seluruh tabel hash di memori. Indeks ini hanya mengetahui bahwa untuk keranjang hash tertentu (lokasi di tabel hash) ada atau tidak ada nilai. Tetapi indeks tidak memiliki nilai sebenarnya.

Oleh karena itu jika baris dari tabel hash kedua atau probing ke salah satu lokasi ini, satu-satunya hal yang diketahui adalah bahwa ada kemungkinan kecocokan. Proses pembuatan tabel hash berlanjut hingga seluruh tabel hash selesai. Bagian dari tabel hash ada di memori dan sebagian ada di Disk

Sekarang Oracle mulai membaca probe atau tabel lain dan mulai membuat hash dari kunci gabungan. Jika kunci hash cocok dengan hash di memori, maka penggabungan selesai dan baris dikembalikan. Jika barisnya cocok, maka Oracle akan menyimpan baris ini pada tablespace TEMP dalam skema partisi yang sama dengan data baris pertama yang disimpan.

Setelah pass pertama dari seluruh tabel sekunder selesai dan semua baris dalam tabel hash dalam memori diberikan, Oracle akan mulai melihat partisi yang cocok di disk dan akan memproses setiap partisi satu per satu dan membaca baris dalam memori dan proses outputnya

Hash bergabung dengan Oracle Contoh:

pilih /* +use_hash( a b) */ a.emp_no,b.dept_no,b.dept_name dari emp a,dept b di mana a.dept_no=b.dept_no;Plan---------- --------------------------------------- PILIH STATEMENTHASH JOINTABLE ACCESS FULL EMPTABLE ACCESS FULL DEPT 

Bagaimana Hash bergabung di Oracle diproses
1) Tabel EMP pertama dipindai dan di-hash
2) tabel dept dipindai untuk setiap baris dan hash dibuat untuk penggabungan menjaga dept_no
3) dept_no hash dicocokkan di tabel hash , jika kecocokan ditemukan, baris yang digabungkan akan dikembalikan

petunjuk bergabung dengan hash oracle 

Oracle telah memberikan petunjuk use_hash untuk memaksa penggunaan hash join.

Pilihan penggunaan /* +use_hash(alias tabel) */ ......

Ini memberitahu pengoptimal bahwa metode join yang akan digunakan ketika “table_alias” adalah sumber baris berikutnya dalam urutan join harus berupa hash join; namun itu tidak memberi tahu pengoptimal apakah sumber baris itu harus digunakan sebagai tabel build atau tabel penyelidikan.

Untuk menentukan bagaimana sumber baris digunakan, Anda memerlukan petunjuk kedua:no_swap_join_inputs("table_alias") jika Anda ingin Oracle menggunakan sumber baris sebagai tabel probe, atau swap_join_inputs("table_alias") jika Anda ingin Oracle menggunakannya sebagai build tabel

Beberapa poin penting tentang hash join di Oracle

1)Output hasil hash join tidak instan karena hash join diblokir saat membangun tabel hash. Setelah pembuatan tabel hash selesai, baris dikembalikan lebih cepat
2)hash join biasanya terlihat dengan pengoptimal ALL_ROWS mode, karena bekerja pada model yang menunjukkan hasil setelah semua baris dari setidaknya satu tabel di-hash di tabel hash.
3)Tabel hash adalah memori pribadi sehingga mengakses data tidak memerlukan banyak aktivitas latching

Biaya hash Gabung =Biaya pembacaan tabel A +biaya pembacaan tabel B + sedikit pemrosesan di memori

Perbedaan antara Nested Loop dan Hash Join

Hash Gabung Gabung Bersarang
Hash join digunakan saat menggabungkan tabel besar atau saat gabungan membutuhkan sebagian besar baris tabel yang digabungkan. Ini digunakan hanya untuk persamaan gabungan Gabungan NESTED LOOPS adalah operasi gabungan yang memilih baris dari sumber baris awal yang dipilih dan menggunakan nilai dari sumber baris ini untuk mengarahkan atau memilih dari sumber baris gabungan yang mencari baris yang cocok.
-Terbaik untuk jenis transaksi OLTP
Operasi Hash biasanya efisien untuk dua kumpulan data ketika banyak catatan dikembalikan. Bila satu kumpulan data tidak memiliki atau jumlah catatan kecil yang dikembalikan dan kumpulan data lainnya dapat dicocokkan menggunakan operasi indeks, maka penggabungan loop bersarang lebih efisien
Anda mungkin melihat lebih banyak gabungan hash yang digunakan dengan mode pengoptimal ALL_ROWS, karena ini berfungsi pada model yang menampilkan hasil setelah semua baris dari setidaknya satu tabel di-hash dalam tabel hash. Anda akan melihat lebih banyak penggunaan loop bersarang saat menggunakan mode pengoptimal FIRST_ROWS karena ini berfungsi pada model yang menampilkan hasil instan kepada pengguna saat diambil. Tidak perlu memilih caching data apa pun sebelum dikembalikan ke pengguna. Dalam hal hash join diperlukan dan dijelaskan di bawah ini.

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

  2. Kembali dari Open World 2013

  3. Otomatiskan Pekerjaan Integrasi Data IRI dengan Oracle Job Scheduler

  4. Tabel bermutasi, pemicu/fungsi mungkin tidak melihatnya (menghentikan nilai rata-rata turun di bawah 2,5)

  5. Cara menggunakan Indeks Virtual di Oracle Database