Indeks dapat memainkan peran penting dalam pengoptimalan kueri dan mencari hasil dengan cepat dari tabel. Jadi, ini adalah langkah paling penting untuk memilih kolom mana yang akan diindeks. Ada dua tempat utama di mana kita dapat mempertimbangkan pengindeksan: kolom yang direferensikan di klausa WHERE dan kolom yang digunakan dalam klausa JOIN. Singkatnya, kolom seperti itu harus diindeks sehingga Anda diminta untuk mencari catatan tertentu. Misalkan, kami 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. Karenanya, 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 berada di klausa WHERE. Juga bidang tambahan, country_id from country table, dapat dipertimbangkan untuk pengindeksan karena berada dalam klausa JOIN. Jadi pengindeksan dapat dipertimbangkan di setiap bidang di klausa WHERE atau klausa JOIN.
Daftar berikut ini juga menawarkan beberapa tip yang harus selalu Anda ingat saat bermaksud membuat indeks ke dalam tabel Anda:
- Hanya indeks kolom yang diperlukan dalam klausa WHERE dan ORDER BY. Kolom pengindeksan yang melimpah akan menghasilkan beberapa kerugian.
- Cobalah untuk memanfaatkan fitur "indeks awalan" atau "indeks multi-kolom" dari MySQL. Jika Anda membuat indeks seperti INDEX (first_name, last_name), jangan buat INDEX (first_name). Namun, "indeks awalan" atau "indeks multi-kolom" tidak disarankan dalam semua kasus pencarian.
- Gunakan atribut NOT NULL untuk kolom-kolom yang Anda pertimbangkan untuk diindeks, 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 bahwa MySQL akan menjalankan kueri. Ini menunjukkan bagaimana dan dalam tabel urutan apa digabungkan. Ini bisa sangat berguna untuk menentukan cara menulis kueri yang dioptimalkan, dan apakah kolom perlu diindeks.
Pembaruan (23 Feb'15):
Indeks apa pun (baik / buruk) meningkatkan waktu penyisipan dan pembaruan.
Bergantung pada indeks Anda (jumlah indeks dan jenis), hasil dicari. Jika waktu pencarian Anda akan meningkat karena indeks maka itu indeks yang buruk.
Kemungkinan besar di buku manapun, "Halaman Indeks" bisa 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. Ingatlah bahwa tidak semua kolom membutuhkan indeks.