Pertanyaan MySQL adalah perlahan, yang merupakan masalah yang dihadapi oleh ramai pengguna MySQL. Pertanyaan perlahan bukan sahaja menjejaskan prestasi pangkalan data, tetapi juga mempengaruhi pengalaman pengguna. Dalam artikel ini, kami akan mempelajari cara menganalisis sebab pertanyaan MySQL yang perlahan dan menyediakan beberapa penyelesaian.
Pertama, kita perlu mendayakan fungsi log pertanyaan perlahan MySQL untuk menganalisis sebab pertanyaan lambat. Log pertanyaan perlahan merekodkan masa yang dihabiskan untuk pertanyaan, pernyataan SQL, alamat pelanggan dan maklumat lain yang berkaitan, yang sangat membantu kami dalam menganalisis pertanyaan perlahan.
Untuk mendayakan log pertanyaan perlahan, kami perlu mengubah suai fail konfigurasi MySQL "my.cnf" atau "my.ini" dan menambah kandungan berikut di bawah nod "[mysqld]":
slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow-query.log long_query_time = 2
Antaranya, "slow_query_log" bermaksud menghidupkan log pertanyaan perlahan, dan nilai 1 bermaksud menghidupkannya "slow_query_log_file" menentukan laluan menyimpan log pertanyaan perlahan, yang boleh diubah suai mengikut sebenar. situasi. "long_query_time" bermaksud berapa saat melebihi masa pertanyaan sebelum ia dianggap sebagai pertanyaan perlahan , lalai ialah 10 saat, anda boleh menetapkannya mengikut situasi sebenar. Selepas mengubah suai fail konfigurasi, mulakan semula perkhidmatan MySQL untuk menjadikan fail konfigurasi berkuat kuasa.
Selepas mempunyai log pertanyaan perlahan, kita perlu menggunakan beberapa alatan untuk menganalisis log dan mengetahui sebab pertanyaan lambat . Dua alatan analisis log pertanyaan perlahan yang biasa digunakan diperkenalkan di bawah:
2.1 mysqldumpslow
mysqldumpslow ialah alat analisis log pertanyaan lambat MySQL sendiri Ia boleh menganalisis log pertanyaan perlahan mengikut dimensi yang berbeza, seperti masa dan masa. Analisis log pertanyaan perlahan berdasarkan pernyataan pertanyaan, alamat pelanggan, dsb., dan berikan hasil statistik yang sepadan.
Sebelum menggunakan mysqldumpslow untuk analisis, kita perlu memahami beberapa parameter mysqldumpslow:
Menggunakan arahan mysqldumpslow memerlukan log pertanyaan perlahan sebagai input Secara amnya, laluan lalai log pertanyaan perlahan ialah "/var/log/mysql/slow-query.log". Berikut ialah contoh:
mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log
Arahan di atas akan mengisih mengikut masa dan mengeluarkan 10 keping data pertama.
2.2 pt-query-digest
pt-query-digest ialah alat analisis log pertanyaan perlahan dalam suite alat Percona Ia bukan sahaja boleh menganalisis log pertanyaan lambat MySQL, tetapi juga menganalisis yang lain Log pertanyaan lambat pangkalan data. Berbanding dengan mysqldumpslow, pt-query-digest menyokong lebih banyak dimensi dan hasil analisis yang lebih tepat.
Sebelum menggunakan pt-query-digest, anda perlu memasang suite alat Percona, dan kemudian jalankan arahan berikut untuk melaksanakan analisis:
pt-query-digest /var/log/mysql/slow-query.log
Selepas operasi selesai, pt- query-digest akan memberikan Keputusan statistik yang sepadan adalah output dan boleh diisih mengikut dimensi yang berbeza.
Menganalisis log pertanyaan perlahan boleh mengetahui sebab pertanyaan lambat, tetapi untuk benar-benar menyelesaikan masalah, anda perlu mengoptimumkan pertanyaan kenyataan. Berikut ialah beberapa cara untuk mengoptimumkan pernyataan pertanyaan.
3.1 Tentukan indeks yang sesuai
Indeks adalah kunci untuk mempercepatkan pertanyaan. Indeks membolehkan MySQL mencari baris data dengan lebih pantas. Apabila mereka bentuk jadual, tetapkan indeks yang sesuai mengikut keperluan pertanyaan. Secara umum, kita harus menambah indeks untuk lajur yang kerap muncul dalam klausa WHERE, sambil mengelakkan terlalu banyak indeks kerana indeks mengambil ruang cakera dan menjejaskan prestasi semasa menulis data.
Jika anda tidak dapat menentukan lajur yang perlu diindeks, kami boleh menggunakan perintah EXPLAIN untuk melihat pelan pelaksanaan pertanyaan dan mengetahui tempat pengoptimuman diperlukan. Sebagai contoh, pernyataan pertanyaan SQL berikut:
SELECT * FROM table WHERE name = 'Tom' and age > 18
Laksanakan arahan EXPLAIN:
EXPLAIN SELECT * FROM table WHERE name = 'Tom' and age > 18
Keputusan berikut diperoleh:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE table ref idx_name_age idx_name_age 123 const 10 Using where
Di mana, " type" mewakili pertanyaan Jenis, jenis biasa termasuk: SEMUA (imbasan jadual penuh), indeks (imbasan indeks), dsb.; "kekunci_mungkin" menunjukkan indeks yang boleh digunakan; "kunci" menunjukkan indeks yang sebenarnya digunakan; "Tambahan" menunjukkan maklumat lain, seperti sama ada untuk menggunakan jadual Sementara, dsb. Jika pertanyaan menggunakan imbasan jadual penuh, ini bermakna indeks yang sesuai tidak digunakan.
3.2 Elakkan menggunakan subkueri yang tidak perlu
Subkueri ialah pernyataan pertanyaan bersarang yang memilih data dan ia boleh disarangkan dalam pernyataan pertanyaan lain. Walaupun subkueri boleh menanyakan data yang kompleks dengan mudah, dalam beberapa kes, subkueri mempunyai prestasi rendah dan boleh menyebabkan masalah dengan mudah. Untuk mengelakkan masalah prestasi subkueri, kami boleh menggunakan pertanyaan berkaitan atau jadual sementara untuk menggantikan subkueri, atau mengoptimumkan subkueri.
3.3 Mengambil data atas permintaan
Apabila kita melaksanakan pernyataan pertanyaan SELECT, kadangkala kita tidak perlu menanyakan semua lajur dan baris, tetapi hanya beberapa lajur dan baris. Pada masa ini, kita harus cuba mengambil data atas permintaan dan mendapatkan bilangan baris yang diperlukan melalui klausa LIMIT untuk mengurangkan beban kerja pangkalan data dan jumlah penghantaran data. Contohnya, pernyataan pertanyaan SQL berikut:
SELECT * FROM table WHERE id > 100 ORDER BY id DESC
hanya perlu menanyakan rekod dengan ID lebih daripada 100 dan mengisihnya dalam susunan menurun mengikut ID. Jika terdapat banyak rekod dalam jadual, kita boleh menggunakan klausa LIMIT untuk mengehadkan set hasil pertanyaan:
SELECT * FROM table WHERE id > 100 ORDER BY id DESC LIMIT 50
以上就是几种优化查询语句的方法,在实际的应用中,我们需要根据具体的情况选择合适的方法。
总结
MySQL 查询慢不仅影响了数据库的性能,还会影响到用户的体验。为了解决查询慢的问题,我们可以使用慢查询日志分析工具,找出问题所在,然后对查询语句进行优化。通过合理地使用索引、避免使用不必要的子查询和按需取数据等方法,可以提高查询的效率,减少查询所花费的时间,让用户获得更好的体验。
Atas ialah kandungan terperinci Bagaimana untuk menganalisis sebab mengapa pertanyaan MySQL lambat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!