Anda pasti harus meluangkan waktu membaca indeks, ada banyak yang ditulis tentang itu, dan penting untuk memahami apa yang terjadi.
Secara umum, suatu indeks memaksakan pemesanan pada baris-baris tabel.
Demi kesederhanaan, bayangkan sebuah tabel hanyalah file CSV besar. Setiap kali baris dimasukkan, itu dimasukkan di akhir . Jadi urutan "alami" dari tabel hanyalah urutan memasukkan baris.
Bayangkan Anda memiliki file CSV yang dimuat dalam aplikasi spreadsheet yang sangat sederhana. Yang dilakukan spreadsheet ini hanyalah menampilkan data, dan menomori baris dalam urutan yang berurutan.
Sekarang bayangkan Anda perlu menemukan semua baris yang memiliki nilai "M" di kolom ketiga. Mengingat apa yang Anda miliki, Anda hanya memiliki satu opsi. Anda memindai tabel memeriksa nilai kolom ketiga untuk setiap baris. Jika Anda memiliki banyak baris, metode ini ("pemindaian tabel") dapat memakan waktu lama!
Sekarang bayangkan bahwa selain tabel ini, Anda punya indeks. Indeks khusus ini adalah indeks nilai di kolom ketiga. Indeks mencantumkan semua nilai dari kolom ketiga, dalam urutan yang bermakna (katakanlah, menurut abjad) dan untuk masing-masingnya, memberikan daftar nomor baris di mana nilai itu muncul.
Sekarang Anda memiliki strategi yang baik untuk menemukan semua baris di mana nilai kolom ketiga adalah "M". Misalnya, Anda dapat melakukan pencarian biner ! Sedangkan pemindaian tabel mengharuskan Anda untuk mencari N baris (di mana N adalah jumlah baris), pencarian biner hanya mengharuskan Anda melihat entri indeks log-n, dalam kasus yang paling buruk. Wow, itu pasti jauh lebih mudah!
Tentu saja, jika Anda memiliki indeks ini, dan Anda menambahkan baris ke tabel (pada akhirnya, karena itulah cara kerja tabel konseptual kami), Anda perlu memperbarui indeks setiap waktu. Jadi Anda melakukan lebih banyak pekerjaan saat Anda sedang menulis baris baru, tetapi Anda menghemat banyak waktu ketika Anda mencari sesuatu.
Jadi, secara umum, pengindeksan membuat tradeoff antara efisiensi baca dan efisiensi menulis. Tanpa indeks, sisipan bisa sangat cepat - mesin database hanya menambahkan baris ke tabel. Saat Anda menambahkan indeks, mesin harus memperbarui setiap indeks saat melakukan memasukkan.
Di sisi lain, membaca menjadi jauh lebih cepat.
Semoga itu mencakup dua pertanyaan pertama Anda (seperti yang sudah dijawab orang lain - Anda perlu menemukan keseimbangan yang tepat).
Skenario ketiga Anda sedikit lebih rumit. Jika Anda menggunakan LIKE, mesin pengindeksan biasanya akan membantu kecepatan baca Anda hingga "%" pertama. Dengan kata lain, jika Anda MEMILIH kolom MANA SEPERTI 'foo% bar%', database akan menggunakan indeks untuk menemukan semua baris tempat kolom dimulai dengan "foo", dan kemudian perlu memindai rowset perantara tersebut untuk menemukan subset yang mengandung "bar". PILIH ... DI MANA kolom SEPERTI '% bar%' tidak dapat menggunakan indeks. Saya harap Anda bisa melihat alasannya.
Akhirnya, Anda harus mulai memikirkan indeks pada lebih dari satu kolom. Konsepnya sama, dan berperilaku mirip dengan hal-hal seperti - pada dasarnya, jika Anda memiliki indeks pada (a, b, c), mesin akan terus menggunakan indeks dari kiri ke kanan sebaik mungkin. Jadi pencarian pada kolom a mungkin menggunakan indeks (a, b, c), seperti halnya pada (a, b). Namun, mesin perlu melakukan pemindaian tabel penuh jika Anda mencari di mana WHERE b = 5 AND c = 1)
Semoga ini sedikit membantu, tetapi saya harus menegaskan bahwa sebaiknya Anda menghabiskan beberapa jam untuk mencari artikel bagus yang menjelaskan hal-hal ini secara mendalam. Ini juga merupakan ide yang baik untuk membaca dokumentasi server database khusus Anda. Cara indeks diimplementasikan dan digunakan oleh perencana kueri dapat sangat bervariasi.