Indeks dapat memainkan peran penting dalam pengoptimalan kueri dan mencari hasil dengan cepat dari tabel. Jadi langkah terpenting adalah memilih kolom mana yang akan diindeks. Ada dua tempat utama di mana kita dapat mempertimbangkan pengindeksan:kolom yang dirujuk dalam klausa WHERE dan kolom yang digunakan dalam klausa JOIN. Singkatnya, kolom tersebut harus diindeks terhadap mana Anda diminta untuk mencari catatan tertentu. Misalkan, kita memiliki tabel bernama pembeli di mana kueri SELECT menggunakan indeks seperti di bawah ini:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
Karena "buyer_id" direferensikan di bagian SELECT, MySQL tidak akan menggunakannya untuk membatasi baris yang dipilih. Oleh karena itu, tidak ada kebutuhan besar untuk mengindeksnya. Di bawah ini adalah contoh lain yang sedikit berbeda dari yang di atas:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
Menurut kueri first_name di atas, kolom last_name dapat diindeks karena terletak di klausa WHERE. Juga bidang tambahan, country_id dari tabel negara, dapat dipertimbangkan untuk pengindeksan karena berada dalam klausa GABUNG. Jadi pengindeksan dapat dipertimbangkan pada setiap bidang dalam klausa WHERE atau klausa GABUNG.
Daftar berikut juga menawarkan beberapa tip yang harus selalu Anda ingat ketika ingin membuat indeks ke dalam tabel Anda:
- Hanya indeks kolom yang diperlukan dalam klausa WHERE dan ORDER BY. Mengindeks kolom dalam jumlah banyak akan menghasilkan beberapa kerugian.
- Cobalah untuk memanfaatkan fitur "index prefix" atau "multi-columns index" dari MySQL. Jika Anda membuat indeks seperti INDEX(first_name, last_name), jangan buat INDEX(first_name). Namun, "awalan indeks" atau "indeks multi-kolom" tidak disarankan dalam semua kasus pencarian.
- Gunakan atribut NOT NULL untuk kolom yang Anda pertimbangkan untuk pengindeksan, sehingga nilai NULL tidak akan pernah disimpan.
- Gunakan opsi --log-long-format untuk mencatat kueri yang tidak menggunakan indeks. Dengan cara ini, Anda dapat memeriksa file log ini dan menyesuaikan kueri Anda.
- Pernyataan EXPLAIN membantu Anda mengungkapkan bagaimana MySQL akan mengeksekusi query. Ini menunjukkan bagaimana dan dalam urutan apa tabel digabungkan. Ini bisa sangat berguna untuk menentukan cara menulis kueri yang dioptimalkan, dan apakah kolom perlu diindeks.
Pembaruan (23 Feb'15):
Setiap indeks (baik/buruk) meningkatkan waktu penyisipan dan pembaruan.
Tergantung pada indeks Anda (jumlah indeks dan jenis), hasilnya dicari. Jika waktu pencarian Anda akan meningkat karena indeks maka itu indeks yang buruk.
Kemungkinan dalam buku apa pun, "Halaman Indeks" dapat memiliki halaman awal bab, nomor halaman topik dimulai, juga halaman sub topik dimulai. Beberapa klarifikasi di halaman Indeks membantu tetapi indeks yang lebih rinci mungkin membingungkan Anda atau membuat Anda takut. Indeks juga memiliki memori.
Pemilihan indeks harus bijaksana. Perlu diingat tidak semua kolom memerlukan index.