Penyata MySQL Melaksanakan Perlahan-lahan dengan Jadual Besar
Apabila bekerja dengan pangkalan data yang mengandungi sejumlah besar rekod, adalah perkara biasa untuk pertanyaan diambil masa yang panjang untuk dilaksanakan. Satu contoh ialah pertanyaan seperti:
select * from `ratings` order by id limit 499500, 500
Lazimnya, pertanyaan harus dilaksanakan dengan cepat, walaupun untuk pangkalan data yang mengandungi berjuta-juta rekod. Untuk menangani isu ini, adalah penting untuk memahami faktor asas yang mempengaruhi prestasi pertanyaan.
Pengindeksan dan Pemilihan Enjin
Penggunaan pengindeksan boleh meningkatkan kelajuan sesuatu secara mendadak. pertanyaan, terutamanya apabila pertanyaan melibatkan jadual besar. Dalam sampel kod yang disediakan, susunan penyata mengikut id menandakan bahawa keputusan harus dikembalikan diisih mengikut lajur id. Jika lajur id tidak diindeks, pangkalan data perlu mengimbas keseluruhan jadual untuk mendapatkan semula data, yang boleh memakan masa untuk jadual besar. Menambah indeks pada lajur id membolehkan pangkalan data mengakses terus baris yang berkaitan tanpa perlu melakukan imbasan jadual yang lengkap.
Mengenai pilihan enjin pangkalan data, adalah penting untuk ambil perhatian bahawa contoh yang diberikan menggunakan MyISAM, yang tidak lagi biasa digunakan kerana pengehadannya berbanding pilihan lain yang tersedia, seperti InnoDB.
Pengoptimuman Pertanyaan
Dalam beberapa kes, mengubah pertanyaan itu sendiri boleh meningkatkan dengan ketara prestasinya. Sebagai contoh, daripada menggunakan klausa had dengan offset yang besar, seperti dalam sampel yang disediakan, adalah lebih cekap untuk menggunakan klausa where. Pertanyaan berikut menunjukkan ini:
select * from `ratings` where id>=499500 limit 500
Pertanyaan ini akan menjadi lebih pantas kerana ia menggunakan indeks kunci utama pada lajur id, membenarkan pangkalan data mengakses terus baris yang berkaitan.
Pengecualian Kebuntuan
Selain itu, adalah penting untuk menghapuskan kemungkinan kebuntuan. Kebuntuan berlaku apabila dua atau lebih proses atau utas menunggu antara satu sama lain untuk mengeluarkan sumber yang dipegang, menghalang kedua-duanya daripada berkembang. Dalam senario yang diberikan, tidak mungkin kebuntuan menjadi punca prestasi perlahan, tetapi perlu dipertimbangkan jika isu-isu lain yang berpotensi telah diketepikan.
Dengan menangani faktor seperti pengindeksan, pengoptimuman pertanyaan dan pangkalan data pemilihan enjin, adalah mungkin untuk meningkatkan masa pelaksanaan dengan ketara walaupun pertanyaan kompleks pada pangkalan data yang besar.
Atas ialah kandungan terperinci Mengapa pernyataan MySQL saya lambat apabila menanyakan jadual besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!