Apa Fungsi Pengindeksan?
Pengindeksan adalah cara untuk mendapatkan tabel yang tidak diurutkan ke dalam urutan yang akan memaksimalkan efisiensi kueri saat menelusuri.
Saat tabel tidak diindeks, urutan baris kemungkinan tidak akan terlihat oleh kueri karena dioptimalkan dengan cara apa pun, dan karena itu kueri Anda harus menelusuri baris secara linier. Dengan kata lain, kueri harus menelusuri setiap baris untuk menemukan baris yang cocok dengan kondisi. Seperti yang dapat Anda bayangkan, ini bisa memakan waktu lama. Melihat melalui setiap baris sangat tidak efisien.
Misalnya, tabel di bawah ini mewakili tabel dalam sumber data fiktif, yang benar-benar tidak berurutan.
Jika kita menjalankan kueri berikut:
SELECT
company_id,
units,
unit_cost
FROM
index_test
WHERE
company_id = 18
Basis data harus mencari melalui 17 baris dalam urutan kemunculannya di tabel, dari atas ke bawah, satu per satu. Jadi untuk mencari semua contoh potensial dari company_id
nomor 18, database harus melihat seluruh tabel untuk semua tampilan 18 di company_id
kolom.
Ini hanya akan memakan lebih banyak waktu karena ukuran tabel meningkat. Ketika kecanggihan data meningkat, apa yang akhirnya bisa terjadi adalah tabel dengan satu miliar baris bergabung dengan tabel lain dengan satu miliar baris; kueri sekarang harus menelusuri dua kali jumlah baris dengan biaya dua kali lipat waktu.
Anda dapat melihat bagaimana ini menjadi masalah di dunia kita yang selalu jenuh data. Tabel bertambah besar dan pencarian bertambah dalam waktu eksekusi.
Mengkueri tabel yang tidak diindeks, jika disajikan secara visual, akan terlihat seperti ini:
Apa yang dilakukan pengindeksan adalah menyiapkan kolom tempat kondisi penelusuran Anda berada dalam urutan yang diurutkan untuk membantu mengoptimalkan kinerja kueri.
Dengan indeks pada company_id
kolom, tabel pada dasarnya akan "terlihat" seperti ini:
Sekarang, database dapat mencari company_id
nomor 18 dan kembalikan semua kolom yang diminta untuk baris itu lalu lanjutkan ke baris berikutnya. Jika comapny_id
baris berikutnya nomor juga 18 maka itu akan mengembalikan semua kolom yang diminta dalam kueri. Jika company_id
baris berikutnya adalah 20, kueri tahu untuk berhenti mencari dan kueri akan selesai.
Bagaimana Cara Kerja Pengindeksan?
Pada kenyataannya tabel database tidak menyusun ulang sendiri setiap kali kondisi kueri berubah untuk mengoptimalkan kinerja kueri:itu tidak realistis. Pada kenyataannya, yang terjadi adalah indeks menyebabkan database membuat struktur data. Tipe struktur data kemungkinan besar adalah B-Tree. Meskipun keuntungan dari B-Tree sangat banyak, keuntungan utama untuk tujuan kami adalah dapat disortir. Ketika struktur data diurutkan, itu membuat pencarian kami lebih efisien untuk alasan yang jelas yang kami tunjukkan di atas.
Ketika indeks membuat struktur data pada kolom tertentu, penting untuk dicatat bahwa tidak ada kolom lain yang disimpan dalam struktur data. Struktur data kami untuk tabel di atas hanya akan berisi company_id
angka. Unit dan unit_cost
tidak akan disimpan dalam struktur data.
Bagaimana Basis Data Mengetahui Bidang Lain di Tabel yang Akan Dikembalikan?
Indeks database juga akan menyimpan pointer yang hanya referensi informasi untuk lokasi informasi tambahan dalam memori. Pada dasarnya indeks memegang company_id
dan alamat rumah baris tertentu pada disk memori. Indeks sebenarnya akan terlihat seperti ini:
Dengan indeks itu, kueri hanya dapat mencari baris di company_id
kolom yang memiliki 18 dan kemudian menggunakan pointer bisa masuk ke tabel untuk menemukan baris tertentu di mana pointer itu tinggal. Kueri kemudian dapat masuk ke tabel untuk mengambil bidang untuk kolom yang diminta untuk baris yang memenuhi ketentuan.
Jika pencarian disajikan secara visual, akan terlihat seperti ini:
Rekap
- Pengindeksan menambahkan struktur data dengan kolom untuk kondisi pencarian dan penunjuk
- Penunjuk adalah alamat pada disk memori baris dengan informasi lainnya
- Struktur data indeks diurutkan untuk mengoptimalkan efisiensi kueri
- Kueri mencari baris tertentu dalam indeks; indeks mengacu pada penunjuk yang akan menemukan sisa informasi.
- Indeks mengurangi jumlah baris yang harus ditelusuri kueri dari 17 menjadi 4.