Tidakkah MySQL Boleh Menggunakan Indeks untuk Pertanyaan Paparan?
Walaupun menghadapi keraguan tentang keberkesanan pandangan, masalah yang anda hadapi timbul daripada ketidakupayaan pengoptimum untuk menolak predikat ke dalam pertanyaan paparan.
MySQL melaksanakan pertanyaan paparan secara berasingan, merealisasikan keputusan dalam jadual perantaraan "terdapat" (MyISAM) sebelum melaksanakan pertanyaan luar. Proses ini melangkau pertimbangan predikat daripada pertanyaan luar semasa pelaksanaan pertanyaan paparan.
Menangani Isu Prestasi
Untuk meningkatkan prestasi pertanyaan paparan anda, optimumkan struktur indeks:
Buat Penutup Indeks:
Tentukan indeks "meliputi" yang merangkumi semua lajur yang dirujuk dalam pertanyaan paparan. Dalam kes ini, cipta indeks berikut:
ON highscores (player, happened_in, score)
Indeks ini akan membenarkan MySQL mengakses pertanyaan paparan dengan "Menggunakan indeks" dan mengelakkan "Menggunakan isor fail" yang lebih mahal.
Nilai Pertanyaan Kendiri:
Bandingkan pelan pelaksanaan pertanyaan pandangan anda dengan kendiri pertanyaan yang mempunyai tujuan yang sama:
SELECT player , MAX(score) AS highest_score , happened_in FROM highscores WHERE player = 24 AND happened_in = 2006 GROUP BY player , happened_in
Pertanyaan kendiri ini juga boleh menggunakan indeks penutup, tetapi ia menghapuskan overhed untuk mewujudkan jadual perantaraan.
Kesimpulan:
Kunci untuk mengoptimumkan pertanyaan paparan dalam MySQL terletak pada mereka bentuk indeks yang sesuai yang pengoptimum boleh memanfaatkan. Pertanyaan lihat pada dasarnya adalah pertanyaan berasingan yang diwujudkan sebelum dirujuk oleh pertanyaan luar. Memahami tingkah laku ini adalah penting untuk mengelakkan perangkap prestasi yang mungkin timbul apabila menggunakan paparan dalam MySQL.
Atas ialah kandungan terperinci Mengapa MySQL Tidak Boleh Menggunakan Indeks untuk Pertanyaan Lihat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!