Artikel ini membahas indeks dan bagaimana Anda dapat menggunakannya untuk meningkatkan kinerja kueri database MySQL.
Kinerja dan indeks basis data
Indeks basis data di MySQL memungkinkan Anda mempercepat kinerja SELECT pernyataan kueri. Untuk tabel kecil, indeks tidak banyak membantu. Namun, jika Anda memiliki tabel dengan data dalam jumlah besar, indeks dapat meningkatkan kinerja secara dramatis.
Perilaku berikut adalah semua indikasi bahwa tabel dapat mengambil manfaat dari penambahan indeks:
- Situs Anda dimuat sangat lambat atau tidak dimuat sama sekali.
- Aplikasi tidak dapat terhubung ke databasenya.
- Kueri basis data dicadangkan.
Jika Anda mengalami salah satu dari masalah ini, Anda harus menganalisis kueri database Anda dan mempertimbangkan untuk menambahkan indeks.
Jika Anda memiliki VPS terkelola atau server khusus terkelola, ukuran buffer sort yang ditingkatkan juga dapat membantu selain menambahkan indeks. Silakan buka tiket di Portal Pelanggan di https://my.a2hosting.com untuk mendiskusikan opsi ini dengan Kru Guru kami.Menganalisis kueri basis data
Untuk menentukan tabel mana yang mungkin mendapat manfaat dari penggunaan indeks, Anda harus menganalisis kueri database Anda. Jelaskan PILIH pernyataan membantu Anda melakukan ini. Untuk menganalisis kueri basis data, ikuti langkah-langkah berikut:
- Masuk ke akun Anda menggunakan SSH.
- Pada prompt perintah, ketik perintah berikut, ganti nama pengguna dengan nama pengguna akun A2 Hosting Anda, dan database dengan nama database:
mysql -u username -p database
- Pada prompt Masukkan Kata Sandi, ketik kata sandi Anda. Perintah mysql> muncul.
-
Ketik perintah SQL berikut:
EXPLAIN SELECT * FROM table_name WHERE conditions \G
Jika Anda menulis kode aplikasi Anda sendiri, maka Anda sudah mengetahui PILIH pernyataan yang Anda gunakan untuk mengambil data. Jika Anda menggunakan aplikasi pihak ketiga, seperti WordPress atau PrestaShop, Anda mungkin perlu memeriksa kode sumber atau log database untuk menentukan PILIH yang tepat pernyataan yang digunakan untuk mengambil data. -
Keluaran dari JELASKAN PILIH pernyataan menunjukkan bagaimana pengoptimal kueri MySQL akan mengeksekusi kueri. Sebagai contoh, perhatikan output berikut:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 142 Extra: Using where 1 row in set (0.00 sec)
Dalam contoh ini keluaran:
- Kunci_mungkin dan kunci keduanya NULL , yang menunjukkan bahwa MySQL tidak memiliki indeks yang dapat digunakan untuk kueri ini.
- Baris nilai menunjukkan bahwa MySQL akan membaca 142 baris untuk kueri ini. Jika ada 142 baris total dalam tabel, ini berarti MySQL harus memeriksa setiap baris untuk menghasilkan kumpulan hasil. Ini bisa memakan waktu cukup lama untuk meja besar.
Di sisi lain, jika kita membuat indeks bernama index_name untuk nama belakang kolom, MySQL mungkin menghasilkan output berikut untuk kueri yang sama:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: range possible_keys: index_name key: index_name key_len: 22 ref: NULL rows: 17 Extra: Using where; Using index 1 row in set (0.00 sec)
Seperti yang Anda lihat, possible_keys dan kunci nilai menunjukkan bahwa MySQL telah menemukan indeks yang dapat digunakan untuk mengoptimalkan kueri. Selain itu, MySQL hanya akan membaca 17 baris untuk menghasilkan kumpulan hasil, bukan semua 142 baris. (Ini berarti tabel memiliki 17 baris dengan nama belakang dimulai dengan “T”.) Terakhir, Ekstra nilai juga menunjukkan bahwa MySQL akan menggunakan indeks untuk kueri.
Menambahkan, menghapus, dan melihat indeks dalam tabel
Setelah Anda menganalisis kueri database dan menentukan di mana hambatan kinerja, Anda siap untuk menambahkan indeks. Untuk melakukannya, ikuti langkah-langkah berikut:
- Masuk ke akun Anda menggunakan SSH.
- Pada prompt perintah, ketik perintah berikut, ganti nama pengguna dengan nama pengguna akun A2 Hosting Anda, dan database dengan nama database:
mysql -u username -p database
- Pada prompt Masukkan Kata Sandi, ketik kata sandi Anda. Perintah mysql> muncul.
-
Untuk menambahkan indeks ke tabel, ketik perintah SQL berikut. Ganti nama_tabel dengan nama tabel, index_name dengan nama indeks baru (yang dapat berupa apa saja yang Anda inginkan), dan table_column dengan nama kolom tabel yang ingin Anda tambahkan indeksnya:
ALTER TABLE table_name ADD INDEX index_name (table_column);
Meskipun indeks dapat meningkatkan kinerja, indeks juga dapat berdampak negatif terhadap kinerja jika jumlahnya terlalu banyak. Ini karena semakin banyak indeks yang dimiliki tabel, semakin banyak pekerjaan yang harus dilakukan MySQL untuk membuatnya tetap diperbarui. Triknya adalah menemukan keseimbangan yang tepat antara indeks yang cukup untuk meningkatkan kinerja, tetapi tidak terlalu banyak sehingga berdampak negatif pada kinerja. -
Untuk menghapus indeks dari tabel, ketik perintah SQL berikut. Ganti nama_tabel dengan nama tabel, dan ganti index_name dengan nama indeks yang ingin Anda hapus:
ALTER TABLE table_name DROP INDEX index_name;
-
Untuk melihat semua indeks untuk tabel, ketik perintah SQL berikut. Ganti nama_tabel dengan nama tabel :
SHOW INDEX FROM table_name \G
Setelah Anda membuat indeks, Anda harus menggunakan MENJELASKAN PILIH pernyataan lagi untuk melihat bagaimana kueri terpengaruh. Selain itu, Anda harus terus memantau kinerja database untuk melihat apakah ada peningkatan. Anda mungkin harus menjalankan serangkaian pengujian untuk menemukan jumlah indeks yang optimal untuk database Anda.
Informasi Lebih Lanjut
- Untuk informasi lebih lanjut tentang pengoptimalan dan indeks MySQL, silakan kunjungi https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
- Untuk informasi selengkapnya tentang MENJELASKAN pernyataan, silakan kunjungi https://dev.mysql.com/doc/refman/5.5/en/explain.html.