Langkah-langkah untuk melaksanakan rencana tersebut
Setiap langkah rencana eksekusi mengembalikan sekumpulan baris yang digunakan pada langkah berikutnya atau, pada langkah terakhir, dikembalikan ke pengguna atau aplikasi yang mengeluarkan pernyataan SQL. Kumpulan baris yang dikembalikan oleh setiap langkah disebut sumber baris. Gambar 5-1 Diagram pohon menunjukkan aliran data dari satu jalur ke jalur lainnya. Penomoran setiap langkah mencerminkan urutan langkah-langkah yang ditampilkan saat Anda melihat rencana eksekusi (cara melihat rencana eksekusi dijelaskan secara singkat). Umumnya ini bukan urutan pelaksanaan setiap langkah. Setiap langkah rencana eksekusi mengambil baris dari database atau menerima data baris sebagai input dari satu atau beberapa sumber baris:
Langkah-langkahnya ditandai dengan kotak merah mengambil data secara fisik dari file data yang ada di database. Langkah ini disebut jalur akses. Jalur akses yang dapat digunakan di Oracle akan diperkenalkan secara rinci nanti:
Langkah 3 dan 6 masing-masing membaca semua baris dari tabel EMP dan tabel SALGRADE.
Langkah 5 mencari setiap nilai DEPTNO yang dikembalikan oleh langkah 3 di indeks PK_DEPTNO. Ia menemukan ROWID dari baris-baris yang terkait dengan tabel DEPT.
Langkah 4 mengambil dari tabel DEPT baris-baris yang ROWID-nya dikembalikan pada langkah 5.
Langkah-langkah yang ditunjukkan oleh kotak teks hitam beroperasi pada sumber baris, seperti mengasosiasi, mengurutkan, atau memfilter antara 2 tabel. Pengenalan rinci akan diberikan nanti:
Langkah 2 mengimplementasikan operasi loop bersarang (setara dengan loop bersarang dalam pernyataan C), menerima sumber baris dari langkah 3 dan 4, dan membandingkan setiap baris dari sumber di langkah 3 dengan sumber barisnya di langkah 4. Baris yang bersesuaian digabungkan menjadi satu dan baris yang dihasilkan dikembalikan ke langkah 1.
Langkah 1 menyelesaikan operasi filter. Ia menerima sumber baris dari langkah 2 dan 6, menghilangkan baris-baris dari langkah 2 yang memiliki baris terkait di langkah 6, dan mengembalikan baris yang tersisa dari langkah 2 ke pengguna atau aplikasi yang mengeluarkan.
Menerapkan urutan langkah-langkah rencana eksekusi
Langkah-langkah dalam rencana eksekusi tidak diimplementasikan sesuai urutan penomorannya: Oracle pertama-tama mengimplementasikan langkah-langkah yang muncul sebagai daun pada grafik struktur pohon pada Gambar 5-1 (misalnya, langkah 3, 5, dan 6). Baris yang dikembalikan oleh setiap langkah disebut sumber baris dari langkah berikutnya. Oracle kemudian mengimplementasikan langkah induk.
Misalnya, untuk mengeksekusi pernyataan pada Gambar 5-1, Oracle mengimplementasikan langkah-langkah berikut dalam urutan berikut:
Pertama, Oracle mengimplementasikan langkah 3 dan mengembalikan baris hasil ke langkah 2, baris demi baris.
Untuk setiap baris yang dikembalikan pada langkah 3, Oracle menerapkan langkah-langkah berikut:
-- Oracle mengimplementasikan langkah 5 dan mengembalikan hasil ROWID ke langkah 4.
-- Oracle mengimplementasikan langkah 4 dan mengembalikan baris hasil ke langkah 2.
-- Oracle mengimplementasikan langkah 2 dan akan menerima satu baris dari langkah 3 dan satu baris dari langkah 4 dan kembali
Beri langkah 1 satu baris.
-- Oracle mengimplementasikan langkah 6. Jika ada baris hasil, kembalikan ke langkah 1.
-- Oracle mengimplementasikan langkah 1. Jika sebuah baris dikembalikan dari langkah 6, Oracle mengembalikan baris dari langkah 2 ke
Pengguna yang mengeluarkan pernyataan SQL.
Perhatikan bahwa Oracle melakukan langkah 5, 4, 2, dan 6 satu kali untuk setiap baris yang dikembalikan pada langkah 3. Banyak langkah induk hanya memerlukan satu baris dari langkah turunannya sebelum dapat dijalankan. Untuk langkah induk seperti itu, langkah induk (dan mungkin rencana eksekusi lainnya) diimplementasikan segera setelah satu baris dikembalikan dari langkah anak. Jika langkah induk dari langkah induk juga dapat diaktifkan melalui pengembalian baris tunggal, maka langkah tersebut juga akan dieksekusi. Oleh karena itu, eksekusi dapat dirantai ke atas pohon, mungkin termasuk sisa rencana eksekusi. Untuk operasi seperti itu, Anda dapat menggunakan first_rows sebagai target pengoptimalan untuk merespons permintaan pengguna dengan cepat.
Untuk setiap baris yang diambil secara bergantian dengan langkah anak, Oracle mengimplementasikan langkah induk dan semua langkah gabungan satu kali. Langkah induk yang dipicu untuk setiap baris yang dikembalikan oleh langkah anak mencakup akses tabel, akses indeks, gabungan loop bersarang, dan filter.
Beberapa langkah induk memerlukan semua baris dari langkah anak sebelum dapat diterapkan. Untuk langkah induk seperti itu, Oracle tidak dapat mengimplementasikan langkah induk sampai semua baris telah dikembalikan dari langkah anak. Langkah induk tersebut meliputi Sortir, Sortir-Gabung, Fungsi Grup, dan Total. Untuk operasi seperti itu, first_rows tidak dapat digunakan sebagai target pengoptimalan, namun all_rows dapat digunakan sebagai target pengoptimalan agar jenis operasi ini mengonsumsi sumber daya paling sedikit.
Terkadang ketika sebuah pernyataan dieksekusi, pernyataan tersebut tidak berjalan selangkah demi selangkah seperti disebutkan di atas, namun mungkin berjalan secara paralel, misalnya, dalam lingkungan aktual, langkah 3, 5, dan 4 dapat berjalan secara paralel untuk mencapai efisiensi yang lebih baik. Dari diagram pohon di atas, sulit untuk melihat urutan eksekusi setiap operasi. Namun, melalui bentuk rencana eksekusi lain yang dihasilkan oleh ORACLE, mudah untuk melihat operasi mana yang dijalankan terlebih dahulu dan mana yang dijalankan kemudian Rencana eksekusi itulah yang sangat kita perlukan, dan akan dijelaskan secara detail nanti.
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044799.aspx
-