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

Loop Bersarang Bergabung di Oracle 11g

Daftar Isi

Apa itu  Loop Bersarang Bergabung di Oracle

-Untuk setiap baris dalam sumber baris pertama, akses semua baris dari sumber baris kedua.
-Gabungan NESTED LOOPS adalah operasi gabungan yang memilih baris dari sumber baris awal yang dipilih dan menggunakan nilai-nilai dari sumber baris ini untuk masuk atau memilih dari sumber baris yang digabungkan untuk mencari baris yang cocok.
-Terbaik untuk jenis transaksi OLTP
-Ini akan menjadi Tercepat jika baris yang dikembalikan dari tabel pertama berukuran kecil

-Nested Loop Join di Oracle 11g bekerja secara berbeda. Detail tentang  diberikan dalam artikel ini

cara kerja nested loop join di oracle

-Pengoptimal oracle pertama-tama menentukan tabel penggerak dan menetapkannya sebagai loop luar. Ini adalah sumber baris penggerak. Ini menghasilkan satu set baris untuk mengemudi kondisi bergabung. Sumber baris dapat berupa tabel yang diakses menggunakan pemindaian indeks atau pemindaian tabel penuh. Baris dapat dihasilkan dari operasi lain juga. Misalnya output dari Nested Loop Join dapat digunakan sebagai sumber baris.
-Pengoptimal menunjuk tabel lain sebagai Loop dalam. Ini diulang untuk setiap baris yang dikembalikan dari loop luar. Ini adalah operasi akses pada tabel dan idealnya harus berupa pemindaian indeks.
-Operasi yang dilakukan oleh tabel INNER diulang untuk setiap baris yang dikembalikan dalam tabel 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

Contoh Penggabungan Loop Bersarang

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

Cara diproses

(1) Baca baris pertama di DEPT
(2) Lakukan pemindaian indeks pada EMP_N1 untuk mencocokkan dept_no dan dapatkan baris pertama
(3) Cari baris yang direferensikan di EMP dan gabungkan informasinya dan berikan output
(4) Ulangi operasi 2,3 untuk setiap baris yang dikembalikan
(5) Ulangi operasi 1,2,3,4 untuk semua baris di DEPT

untuk x in (pilih dari tabel dept)
loop
untuk baris di (pilih dari tabel emp )
loop
baris output yang digabungkan dikembalikan jika kondisinya cocok
end loop
akhir loop

Di sini metode akses untuk memilih dari tabel emp akan melalui pemindaian indeks
Jika pengoptimal memilih untuk menggunakan beberapa metode bergabung lainnya, Anda dapat menggunakan petunjuk USE_NL(A B), di mana A dan B adalah alias dari tabel sedang bergabung.

Perhitungan Biaya
Dalam NESTED LOOPS join, untuk setiap baris di set baris luar, set baris dalam diakses untuk menemukan semua baris yang cocok untuk digabungkan. Oleh karena itu, dalam jenis gabungan ini, kumpulan baris dalam diakses sebanyak jumlah baris pada kumpulan baris luar.
Biaya :biaya untuk mengakses tabel A + jumlah baris yang dikembalikan dari tabel A X biaya untuk mengakses tabel B

Jadi ini akan hemat biaya jika baris kecil dikembalikan dari tabel luar dan operasi akses untuk tabel dalam adalah melalui pemindaian unik atau pemindaian rentang indeks kecil

Metode Baru untuk Nested Loop Bergabung di Oracle 11g

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

Dokumentasi Oracle mengatakan ini tentang
Ketika indeks atau blok tabel tidak ada dalam cache buffer dan diperlukan untuk memproses penggabungan, I/O fisik diperlukan. Dalam Oracle Database 11g Release 1 (11.1), Oracle Database dapat mengelompokkan beberapa permintaan I/O fisik dan memprosesnya menggunakan I/O vektor alih-alih memprosesnya satu per satu. Sebagai bagian dari implementasi baru untuk gabungan loop bersarang, dua sumber baris gabungan NESTED LOOPS mungkin muncul dalam rencana eksekusi di mana hanya satu yang akan muncul di rilis sebelumnya. Dalam kasus seperti itu, Oracle Database mengalokasikan satu NESTED LOOPS bergabung dengan sumber baris untuk menggabungkan nilai-nilai dari tabel di sisi luar gabungan dengan indeks di sisi dalam. Sumber baris kedua dialokasikan untuk menggabungkan hasil gabungan pertama, yang mencakup baris-baris yang disimpan dalam indeks oracle, dengan tabel di sisi dalam gabungan”

Nested Loops luar bergabung di Oracle

-Mirip dengan nested loop
-Baris yang dikembalikan bahkan jika inner loop tidak memiliki baris yang memenuhi kriteria
-Tidak seperti nested loop yang mungkin didorong dari salah satu tabel, ini adalah satu cara bergabung
a =b(+) akan selalu ke a sebelum b, ini dapat mengakibatkan rencana yang lebih mahal (mungkin non-NL)
(+) selalu berjalan di sisi yang kurang

Juga Dibaca
Hash Join
Metode join di 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. 2 Cara Menghapus Baris Duplikat di Oracle

  2. Ubah tabel untuk mengubah nilai default kolom

  3. Bagaimana cara menghapus duplikat dari daftar yang dipisahkan ruang oleh Oracle regexp_replace?

  4. Menginstal Klien Instan Oracle

  5. PL/SQL, bagaimana cara menghindari kutipan tunggal dalam sebuah string?