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