Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara menggunakan indeks untuk meningkatkan kinerja kueri MySQL

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:

  1. Masuk ke akun Anda menggunakan SSH.
  2. 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
  3. Pada prompt Masukkan Kata Sandi, ketik kata sandi Anda. Perintah mysql> muncul.
  4. 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.
  5. 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:

  1. Masuk ke akun Anda menggunakan SSH.
  2. 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
  3. Pada prompt Masukkan Kata Sandi, ketik kata sandi Anda. Perintah mysql> muncul.
  4. 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.
  5. 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;
    
  6. 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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus tag HTML dari catatan

  2. Bagaimana cara mengeksekusi PHP yang disimpan dalam database MySQL?

  3. MySQL Query - Catatan antara Hari Ini dan 30 Hari Terakhir

  4. Menggunakan kueri MySQL untuk melintasi baris untuk membuat pohon rekursif

  5. Bisakah JavaScript terhubung dengan MySQL?