Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan tanpa Imbasan Jadual Penuh
Ketidakcekapan pertanyaan yang anda berikan adalah disebabkan oleh imbasan jadual penuh yang dilakukan untuk mendapatkan maksimum ID untuk setiap option_id. Di bawah ialah strategi untuk mengoptimumkan pertanyaan ini tanpa imbasan sedemikian:
Menggunakan Jadual Berasingan:
Buat jadual berasingan, seperti "pilihan," yang menyimpan option_id bersama-sama dengan ID maksimum yang sepadan. Wujudkan hubungan penting asing antara rekod dan pilihan untuk memastikan integriti. Ini membolehkan pertanyaan yang cekap bagi ID maksimum dengan menyertai rekod pada option_id.
Subquery Berkaitan dengan Indeks:
Menggunakan subquery berkorelasi merujuk indeks pada (option_id, id ) boleh mendapatkan semula ID maksimum untuk setiap option_id dengan cekap. Subkueri hanya akan mengakses baris yang berkaitan, menghapuskan keperluan untuk imbasan jadual penuh.
Cambungan Lateral:
Dalam PostgreSQL 9.3 dan lebih baru, cantuman sisi boleh digunakan bersama-sama dengan CTE untuk mensimulasikan imbasan indeks sahaja dengan bergabung pada subkueri sisi yang mengambil yang dikehendaki nilai daripada indeks.
Pengoptimuman MySQL:
Menariknya, MySQL 5.5 boleh mengoptimumkan pertanyaan ini menggunakan indeks pada rekod(option_id, id). Ini menunjukkan bahawa MySQL mempunyai mekanisme untuk mengoptimumkan pertanyaan maksimum mengikut kumpulan dengan struktur indeks tertentu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan Maksimum Mengikut Kumpulan Tanpa Imbasan Jadual Penuh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!