Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan untuk Mendapatkan Maksimum Mengikut Kumpulan dengan Cekap?

Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan untuk Mendapatkan Maksimum Mengikut Kumpulan dengan Cekap?

Linda Hamilton
Lepaskan: 2024-12-26 10:51:10
asal
578 orang telah melayarinya

How Can I Optimize a Query to Efficiently Find the Groupwise Maximum?

Pertanyaan Dioptimumkan untuk Maksimum Mengikut Kumpulan yang Cekap

Masalah Asal:

Pertanyaan

select * 
from records 
where id in ( select max(id) from records group by option_id )
Salin selepas log masuk

melakukan imbasan berurutan bagi keseluruhan jadual rekod untuk menentukan ID maksimum bagi setiap option_id. Pendekatan ini tidak cekap, terutamanya untuk jadual besar.

Penyelesaian: Sertaan Sisi

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
Salin selepas log masuk

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.

Mencipta Indeks Khusus

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))
Salin selepas log masuk

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
)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan