Konsep Rowid:
rowid adalah kolom semu. Karena merupakan kolom semu, kolom ini tidak ditentukan oleh pengguna, tetapi ditambahkan oleh sistem itu sendiri. Terdapat kolom semu rowid untuk setiap tabel, namun nilai kolom ROWID tidak disimpan secara fisik dalam tabel. Namun, Anda bisa menggunakannya seperti kolom lainnya, tapi Anda tidak bisa menghapus atau mengubah kolom, Anda juga tidak bisa mengubah atau menyisipkan nilai kolom. Setelah baris data dimasukkan ke dalam database, rowid bersifat unik selama siklus hidup baris tersebut, yaitu, meskipun baris tersebut mengalami migrasi baris, rowid tidak akan berubah.
Mengapa menggunakan ROWID
rowid menyediakan metode akses tercepat ke baris tertentu dalam tabel. Blok data terkait dapat langsung ditempatkan melalui ROWID dan kemudian dibaca ke dalam memori. Saat kita membuat indeks, indeks tidak hanya menyimpan nilai kolom indeks, tetapi juga menyimpan ROWID baris yang sesuai dengan nilai indeks, dengan cara ini, setelah kita dengan cepat menemukan ROWID baris terkait melalui indeks, kita dapat dengan cepat menanyakan data melalui ROWID. Inilah mengapa lebih cepat bila kita menggunakan kueri indeks.
Pada ORACLE8 versi sebelumnya, ROWID terdiri dari FILE, BLOCK, dan ROW NUMBER. Dengan perluasan konsep objek di Oracle8, ROWID telah berubah terdiri dari OBJECT, FILE, BLOCK, dan ROW NUMBER. Anda dapat menggunakan DBMS_ROWID untuk menguraikan rowid menjadi bagian-bagian di atas, atau Anda dapat menggabungkan bagian-bagian di atas menjadi rowid yang valid.
Konsep SQL rekursif Terkadang untuk mengeksekusi pernyataan sql yang dikeluarkan oleh pengguna, Oracle harus mengeksekusi beberapa pernyataan tambahan. Kami menyebut pernyataan tambahan ini 'panggilan rekursif' atau 'pernyataan SQL rekursif'. Misalnya, ketika pernyataan DDL dikeluarkan, ORACLE selalu secara implisit mengeluarkan beberapa pernyataan SQL rekursif untuk mengubah informasi kamus data sehingga pengguna berhasil mengeksekusi pernyataan DDL. Panggilan rekursif sering terjadi ketika informasi kamus data yang diperlukan tidak ada di memori bersama. Panggilan rekursif ini membaca informasi kamus data dari hard disk ke dalam memori. Pengguna tidak peduli dengan eksekusi pernyataan SQL rekursif ini ORACLE akan secara otomatis mengeksekusi pernyataan ini secara internal bila diperlukan. Tentu saja, pernyataan DML dan SELECT dapat menyebabkan SQL rekursif. Sederhananya, kita dapat menganggap pemicu sebagai SQL rekursif.
Sumber Baris
Digunakan dalam kueri, kumpulan baris yang memenuhi syarat yang dikembalikan oleh operasi sebelumnya dapat berupa kumpulan semua data baris dalam tabel; dapat juga berupa kumpulan data baris parsial dalam tabel; sumber baris. Kumpulan data baris yang diperoleh setelah operasi koneksi (seperti koneksi gabungan).
Predikat
Batasan WHERE dalam kueri
Meja Mengemudi
Tabel ini disebut juga dengan tabel luar (OUTER TABLE). Konsep ini digunakan dalam gabungan bersarang dan HASH. Jika sumber baris mengembalikan lebih banyak data baris, hal ini akan berdampak negatif pada semua operasi selanjutnya. Perhatikan bahwa meskipun ini diterjemahkan sebagai tabel penggerak, sebenarnya ini lebih akurat diterjemahkan sebagai sumber baris penggerak. Secara umum, setelah menerapkan batasan kueri, tabel dengan sumber baris lebih sedikit dikembalikan sebagai tabel penggerak. Oleh karena itu, jika tabel besar memiliki batasan (seperti batasan kesetaraan) dalam kondisi WHERE, tabel besar juga akan digunakan sebagai penggerak. tabel. Sesuai, jadi bukan hanya tabel yang lebih kecil yang dapat digunakan sebagai tabel penggerak. Pernyataan yang benar adalah bahwa setelah menerapkan batasan kueri, tabel yang mengembalikan sumber baris yang lebih sedikit digunakan sebagai tabel penggerak. Dalam rencana eksekusi, ini harus menjadi sumber baris atas. Instruksi khusus akan diberikan nanti. Dalam uraian kami selanjutnya, tabel ini umumnya disebut sebagai sumber baris 1 dari operasi penggabungan.
Tabel Pemeriksaan (tabel pemeriksaan)
Tabel ini disebut juga tabel bagian dalam (INNER TABLE). Setelah kita mendapatkan baris data tertentu dari tabel driver, kita mencari baris dalam tabel yang memenuhi kondisi join. Jadi tabel tersebut harus berupa tabel besar (sebenarnya harus berupa tabel yang mengembalikan sumber baris yang lebih besar) dan harus ada indeks pada kolom yang sesuai. Dalam uraian kami selanjutnya, tabel ini umumnya disebut sebagai sumber baris 2 dari operasi penggabungan.
indeks gabungan (indeks gabungan)
Indeks yang terdiri dari beberapa kolom, seperti membuat indeks idx_emp pada emp(col1, col2, col3, ...), maka indeks idx_emp kita sebut sebagai indeks komposit. Ada konsep penting dalam indeks gabungan: kolom terdepan. Saat kita membuat query, kita bisa menggunakan "where col1 = ?" atau "where col1 = ? dan col2 = ?". Pembatasan tersebut akan menggunakan indeks, tetapi query "where col2 =?" Oleh karena itu, hanya jika kolom utama disertakan dalam pembatasan, indeks gabungan akan digunakan untuk pembatasan tersebut.
Selektivitas:
Membandingkan jumlah kunci unik dalam suatu kolom dengan jumlah baris dalam tabel menentukan selektivitas kolom. Jika rasio "jumlah kunci unik/jumlah baris dalam tabel" kolom mendekati 1, maka selektivitas kolom lebih tinggi, kolom lebih cocok untuk membuat indeks, dan selektivitas indeks juga lebih tinggi. Saat membuat kueri pada kolom yang sangat dapat dipilih, lebih sedikit data yang dikembalikan, sehingga kueri indeks lebih sesuai.
Dengan latar belakang pengetahuan ini, kami mulai memperkenalkan rencana pelaksanaan. Untuk mengeksekusi sebuah pernyataan, Oracle mungkin harus mengimplementasikan banyak langkah. Masing-masing langkah ini mungkin secara fisik mengambil baris data dari database atau mempersiapkannya untuk digunakan oleh pengguna yang mengeluarkan pernyataan. Kombinasi langkah-langkah yang digunakan Oracle untuk mengeksekusi pernyataan disebut rencana eksekusi. Rencana eksekusi adalah bagian paling kompleks dan penting dari optimasi SQL. Hanya dengan mengetahui bagaimana ORACLE mengeksekusi pernyataan SQL secara internal kita dapat mengetahui apakah rencana eksekusi yang dipilih oleh pengoptimal sudah optimal. Rencana eksekusi sama pentingnya bagi DBA seperti halnya laporan keuangan bagi personel keuangan. Jadi permasalahan utama yang kita hadapi adalah: bagaimana mendapatkan rencana eksekusi; bagaimana menganalisis rencana eksekusi untuk mengetahui masalah utama yang mempengaruhi kinerja. Berikut ini akan dimulai dengan menganalisis rencana eksekusi pohon, kemudian memperkenalkan cara mendapatkan rencana eksekusi, dan kemudian memperkenalkan cara menganalisis rencana eksekusi.
Contoh:
Contoh ini menunjukkan rencana eksekusi untuk pernyataan SQL berikut.
PILIH enam, pekerjaan, sal, nama
DARI karyawan, dept
WHERE emp.deptno = derpt.deptno
DAN TIDAK ADA
(PILIH *
DARI salgrade
DIMANA emp.sal ANTARA losal DAN hisal );
Pernyataan ini menanyakan nama, pekerjaan, gaji, dan nama departemen dari semua karyawan yang gajinya tidak termasuk dalam kisaran gaji yang direkomendasikan.
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044672.aspx