Mengenai pertanyaan indeks, indeks tidak hanya diinginkan, tetapi dibutuhkan untuk "mempercepat" sesuatu. Seperti yang saya pahami (dalam istilah "awam"), fungsi indeks adalah untuk mempercepat pencarian dan pemulihan data di dalam tabel.
Alasan untuk menggunakan indeks:
- Identifikasi secara unik setiap baris pada setiap tabel (bagaimanapun juga, kunci utama adalah indeks)
- Indeks diurutkan (meskipun data tidak)
- Mempercepat pencarian dan filter:Indeks membuat pemulihan data lebih cepat, karena "menahan" penempatan data dalam tabel (ini "menunjukkan" data yang ingin Anda pulihkan). Juga mempermudah mesin database untuk memfilter data (selalu lebih cepat dan lebih mudah untuk memfilter diurutkan data dari diacak data)
- Optimalkan cara data dipulihkan saat menggunakan tabel terkait:Setiap kunci asing harus diindeks untuk mempercepat kueri yang melibatkan hubungan kunci utama - kunci asing
Beberapa "aturan jempol" yang saya gunakan untuk memutuskan bidang mana yang perlu diindeks:
- Setiap kunci utama diindeks (jelas satu:kunci utama harus unik dan bukan nol)
- Setiap kunci asing harus diindeks (untuk mengefisienkan hubungan kunci utama - kunci asing)
- Setiap bidang numerik atau tanggal yang saya perlukan untuk melakukan penelusuran harus diindeks. Yang mengatakan, saya mencoba menghindari
double
(atau jenis numerik floating point lainnya) yang akan diindeks, karena umumnya digunakan untuk menyimpan nilai yang tidak dimaksudkan untuk dicari. - Setiap
char
atauvarchar
bidang di mana saya perlu melakukan pencarian harus diindeks. Cobalah untuk menghindari indeks padatext
bidang, karena mereka dapat menyimpan nilai yang sangat besar di dalamnya. - Hindari pengindeksan biner (
blob
) bidang... tidak masuk akal - Jangan jatuh dalam godaan mengindeks semuanya. Luangkan waktu Anda untuk memutuskan bidang mana yang harus diindeks dan bidang mana yang tidak boleh diindeks.