Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Bagaimana Pengindeksan Bekerja

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.

id_perusahaan unit unit_cost 10 12 1.15 12 12 1,05 14 18 1,31 18 18 1,34 11 24 1.15 16 12 1,31 10 12 1.15 12 24 1.3 18 6 1,34 18 12 1,35 14 12 1.95 21 18 1,36 12 12 1,05 20 6 1,31 18 18 1,34 11 24 1.15 14 24 1,05

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:

id_perusahaan unit unit_cost 10 12 1.15 10 12 1.15 11 24 1.15 11 24 1.15 12 12 1,05 12 24 1.3 12 12 1,05 14 18 1,31 14 12 1.95 14 24 1,05 16 12 1,31 18 18 1,34 18 6 1,34 18 12 1,35 18 18 1,34 20 6 1,31 21 18 1,36

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:

id_perusahaan pointer 10 _123 10 _129 11 _127 11 _138 12 _124 12 _130 12 _135 14 _125 14 _131 14 _133 16 _128 18 _126 18 _131 18 _132 18 _137 20 _136 21 _134

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menjatuhkan kolom dalam SQL?

  2. Cara Menambahkan Posisi Peringkat Baris dalam SQL dengan RANK()

  3. Mengapa Beberapa GABUNG buruk untuk Kueri atau Tidak Menghalangi Pengoptimal

  4. Penyembunyian Data dalam Aplikasi DB

  5. 911/112:Model Data Layanan Panggilan Darurat