Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan untuk Mendapatkan Maksimum Mengikut Kumpulan dengan Cekap?
Masalah Asal:
Pertanyaan
select * from records where id in ( select max(id) from records group by option_id )
melakukan imbasan berurutan bagi keseluruhan jadual rekod untuk menentukan ID maksimum bagi setiap option_id. Pendekatan ini tidak cekap, terutamanya untuk jadual besar.
Satu penyelesaian ialah memanfaatkan cantuman sisi untuk mengambil ID maksimum bagi setiap option_id dalam subquery:
select r.* from records r cross join lateral ( select max(id) as max_id from records where option_id = r.option_id ) m where r.id = m.max_id
Pertanyaan ini menggunakan cantuman sisi untuk mengira ID maksimum dalam subkueri berasingan. Hasilnya digabungkan dengan jadual rekod asal untuk menapis hanya baris dengan ID maksimum.
Satu lagi pengoptimuman ialah mencipta indeks khusus pada jadual rekod yang menyimpan ID maksimum untuk setiap option_id:
CREATE INDEX idx_max_id ON records (option_id, max(id))
Indeks ini membolehkan carian terus ID maksimum untuk sesuatu option_id, menghapuskan keperluan untuk subquery asal:
select * from records r where (option_id, id) in ( select option_id, max(id) from records group by option_id )
Pendekatan berasaskan indeks dengan ketara mengurangkan bilangan akses jadual, menjadikan pertanyaan lebih cekap untuk jadual besar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan untuk Mendapatkan Maksimum Mengikut Kumpulan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!