Terdapat enam jenis indeks dalam Oracle: 1. Indeks nombor "B*", yang boleh memberikan akses pantas kepada satu baris atau satu set baris berdasarkan kekunci 2. Indeks peta bit, sesuai untuk sangat Data berulang dan biasanya baca sahaja; 3. Indeks berasaskan fungsi, yang menyimpan hasil pengiraan fungsi dalam lajur baris 4. Indeks domain aplikasi, yang merupakan indeks yang dibina dan disimpan oleh anda sendiri; , anda mesti menggunakan kluster HASH untuk menggunakan indeks ini 6. Indeks terbahagi, bahagikan indeks kepada berbilang serpihan.
Persekitaran pengendalian tutorial ini: sistem Windows 10, Oracle versi 12c, komputer Dell G3.
Oracle menyediakan pelbagai jenis indeks untuk digunakan. Ringkasnya, Oracle menyertakan indeks berikut:
1. Indeks pokok B*
Ini adalah apa yang saya panggil indeks "tradisional". Ini adalah indeks yang paling biasa digunakan dalam Oracle dan kebanyakan pangkalan data lain.
Pokok B* dibina serupa dengan pokok binari dan boleh memberikan akses pantas kepada baris atau set baris berdasarkan kekunci, biasanya hanya memerlukan beberapa operasi baca untuk mencari baris yang betul. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa "B" dalam "pokok B*" tidak mewakili binari, tetapi mewakili seimbang. Indeks pepohon B* bukanlah pepohon binari, kerana anda akan pelajari apabila kami memperkenalkan cara menyimpan pepohon B* secara fizikal pada cakera. Indeks pepohon B* mempunyai subjenis berikut:
jadual tersusun indeks (jadual tersusun indeks): Jadual tersusun indeks disimpan dalam struktur pepohon B*. Tidak seperti jadual timbunan, di mana baris data disimpan dalam cara yang tidak teratur (data boleh diletakkan selagi ada ruang yang tersedia), data dalam IOT disimpan dan diisih mengikut susunan kunci utama. Untuk aplikasi, IOT berkelakuan seperti jadual "biasa" diperlukan untuk mengakses IOT dengan betul. IOT paling berguna untuk pemerolehan maklumat, sistem spatial dan aplikasi OLAP. IoT telah dibincangkan secara terperinci dalam bab sebelumnya.
Indeks kluster B*tree (indeks kluster B*tree) Ini adalah varian indeks B*tree tradisional (dengan hanya sedikit perubahan). Indeks berkelompok pokok B* digunakan untuk mengindeks kunci berkelompok (lihat bahagian "Mengindeks Jadual Berkelompok" dalam Bab 11.), jadi ia tidak akan dibincangkan dalam bab ini. Dalam pokok B* tradisional, kekunci menghala ke satu baris, tidak seperti pengelompokan pokok B*, kekunci pengelompokan menghala ke blok yang mengandungi berbilang baris yang berkaitan dengan kekunci pengelompokan ini.
Indeks menurun: Indeks menurun membenarkan data diisih dalam struktur indeks dalam tertib "daripada besar ke kecil" (tertib menurun), bukannya tertib "kecil ke besar" (tertib menaik). Kami menerangkan sebab indeks menurun adalah penting dan menerangkan cara indeks menurun berfungsi.
Indeks kunci terbalik: Ini juga indeks pepohon B*, kecuali bait dalam kunci akan "terbalik". Dengan indeks kunci terbalik, entri indeks boleh diagihkan dengan lebih sama rata dalam indeks jika indeks diisi dengan nilai yang semakin meningkat. Sebagai contoh, jika anda menggunakan jujukan untuk menjana kunci utama, jujukan akan menjana nilai seperti 987500, 987501, 987502 dan seterusnya. Nilainya adalah berurutan, jadi jika indeks pokok B* tradisional digunakan, nilai ini mungkin diletakkan pada blok sebelah kanan yang sama, yang meningkatkan perbalahan untuk blok ini. Menggunakan kekunci terbalik, Oracle secara logik akan mengindeks 205789, 105789, 005789, dsb. Oracle akan membalikkan bait data yang disimpan sebelum meletakkannya dalam indeks, supaya nilai yang mungkin bersebelahan antara satu sama lain dalam indeks akan berjauhan selepas pembalikan bait. Dengan membalikkan bait, sisipan ke dalam indeks tersebar di beberapa blok.
2. Indeks bitmap (indeks bitmap)
Dalam pokok B*, biasanya terdapat jurang antara entri indeks dan baris . Hubungan satu dengan satu: satu masukan indeks menghala ke satu baris. Untuk indeks bitmap, satu entri indeks menggunakan peta bit untuk menunjuk ke beberapa baris pada masa yang sama. Indeks bitmap sesuai untuk data yang sangat berulang dan biasanya baca sahaja (sangat berulang bermakna data hanya mempunyai beberapa nilai yang berbeza berbanding dengan jumlah baris dalam jadual). Pertimbangkan jadual dengan 1 juta baris, di mana setiap lajur hanya mempunyai tiga nilai yang mungkin: Y, N dan NULL. Sebagai contoh, jika anda perlu kerap mengira bilangan baris yang mempunyai nilai Y, ini sesuai untuk membina indeks peta bit. Walau bagaimanapun, ini tidak bermakna jika lajur tertentu dalam jadual ini mempunyai 11.000 nilai yang berbeza, indeks bitmap tidak boleh dibuat Sudah tentu, indeks bitmap juga boleh dibuat untuk lajur ini. Dalam pangkalan data OLTP, indeks peta bit tidak boleh dipertimbangkan kerana isu berkaitan konkurensi (kita akan membincangkannya kemudian). Ambil perhatian bahawa indeks bitmap memerlukan Oracle Enterprise atau Edisi Peribadi.
Indeks gabungan peta bit: Ini menyediakan cara untuk menyahnormalkan data dalam struktur indeks (bukannya jadual). Sebagai contoh, pertimbangkan jadual EMP dan DEPT yang mudah. Seseorang mungkin bertanya soalan ini: "Berapa ramai orang yang bekerja di jabatan yang terletak di Boston mempunyai kunci asing yang menunjuk kepada DEPT Untuk mengira bilangan pekerja di jabatan dengan nilai LOC Boston, anda biasanya perlu melengkapkan a gabungan jadual dan Lajur LOC bergabung dengan rekod EMP untuk menjawab soalan ini. Dengan menggunakan indeks gabungan peta bit, anda boleh mengindeks lajur LOC pada jadual EMP.
3. Indeks berasaskan fungsi (indeks berasaskan fungsi)
Ini ialah indeks pepohon B* atau indeks bitmap, yang akan menjadi Hasil pengiraan fungsi disimpan dalam lajur baris, bukannya data lajur itu sendiri. Anda boleh menganggap indeks berasaskan fungsi sebagai indeks pada lajur maya (atau lajur terbitan), lajur tidak disimpan secara fizikal dalam jadual. Indeks berasaskan fungsi boleh digunakan untuk mempercepatkan pertanyaan seperti SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE kerana nilai FUNCTION(DATABASE_COLUMN) telah dikira terlebih dahulu dan disimpan dalam indeks.
4. Indeks domain aplikasi (indeks domain aplikasi)
Indeks domain aplikasi ialah indeks yang anda bina dan simpan sendiri, yang mungkin disimpan dalam Oracle dalam, dan mungkin di luar Oracle. Anda perlu memberitahu pengoptimum betapa selektif indeks itu dan betapa mahalnya untuk dilaksanakan, dan pengoptimum akan memutuskan sama ada untuk menggunakan indeks anda berdasarkan maklumat yang anda berikan. Indeks teks Oracle ialah contoh indeks domain aplikasi anda juga boleh membina sendiri menggunakan alat yang sama yang anda gunakan untuk membina indeks teks Oracle. Perlu diingatkan bahawa "indeks" yang dibuat di sini tidak memerlukan penggunaan struktur indeks tradisional. Sebagai contoh, indeks teks Oracle menggunakan set jadual untuk melaksanakan konsep indeks mereka.
5. Indeks HASH
Menggunakan indeks HASH anda mesti menggunakan kelompok HASH. Apabila anda membuat kluster atau kluster HASH, anda juga menentukan kunci kluster. Kunci ini memberitahu Oracle cara menyimpan jadual pada kelompok. Apabila menyimpan data, semua baris yang berkaitan dengan kunci kluster ini disimpan pada blok pangkalan data. Jika data disimpan dalam blok pangkalan data yang sama dan indeks HASH digunakan, Oracle boleh mengakses data dengan melaksanakan fungsi HASH dan I/O - dan dengan menggunakan data indeks B-tree ketinggian binari, anda perlu menggunakan 4 I/O apabila mendapatkan semula data.
Petua: Indeks HASH sangat berguna apabila terdapat sekatan (perlu menentukan nilai tertentu dan bukannya julat nilai).
6. Indeks terbahagi
Indeks terbahagi hanya membahagikan indeks kepada berbilang serpihan supaya serpihan yang lebih kecil boleh diakses, dan serpihan ini boleh disimpan pada cakera keras yang berbeza (untuk mengelakkan masalah I/O). Kedua-dua indeks nombor B dan indeks bitmap boleh dibahagikan, tetapi indeks HASH tidak boleh dibahagikan.
Terdapat dua jenis indeks partitioned: indeks partitioned tempatan dan indeks partitioned global. Setiap jenis mempunyai dua subjenis, awalan dan tidak awalan. Jika indeks bitmap digunakan, ia mestilah indeks setempat.
Sebab utama untuk membahagikan indeks adalah untuk mengurangkan saiz indeks yang perlu dibaca Selain itu, meletakkan partition dalam ruang jadual yang berbeza boleh meningkatkan ketersediaan dan kebolehpercayaan partition.
Tutorial yang disyorkan: "Tutorial Video Oracle"
Atas ialah kandungan terperinci Oracle mempunyai beberapa indeks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!