Bagaimana untuk Mengembalikan Baris Terakhir Setiap Kumpulan dengan Cekap dalam MySQL?

DDD
Lepaskan: 2024-11-11 20:29:02
asal
653 orang telah melayarinya

How to Efficiently Return the Last Row of Each Group in MySQL?

Kembalikan Baris Terakhir Setiap Kumpulan dalam MySQL Dengan Berkesan

Mengembalikan baris terakhir setiap kumpulan dalam MySQL selalunya diperlukan untuk manipulasi data. Pertanyaan yang diberikan dalam gesaan:

select * 
    from foo as a
    where a.id = (select max(id) from foo where uid = a.uid group by uid)
    group by uid;
Salin selepas log masuk

mencapai ini dengan melakukan pertanyaan bersarang untuk mencari ID maksimum bagi setiap UID unik, kemudian memilih hanya baris dengan ID yang sepadan.

Pendekatan Lebih Cekap

Walau bagaimanapun, pertanyaan yang lebih cekap boleh digunakan untuk menghapuskan pertanyaan bersarang:

SELECT t1.* 
FROM foo t1
JOIN (
    SELECT uid, MAX(id) AS max_id 
    FROM foo 
    GROUP BY uid
) t2 ON t1.id = t2.max_id;
Salin selepas log masuk

Pertanyaan ini menggunakan operasi JOIN untuk memadankan secara langsung dengan maksimum ID untuk setiap UID, memberikan prestasi yang lebih baik berbanding pendekatan pertanyaan bersarang.

Pertimbangan Pengoptimuman Tambahan

Untuk pengoptimuman lanjut, EXPLAIN boleh digunakan untuk menganalisis pelan pertanyaan dan mengenal pasti sebarang kemungkinan kesesakan. Selain itu, indeks pada lajur UID boleh meningkatkan prestasi pertanyaan dengan ketara.

Pendekatan Alternatif

Pilihan lain ialah menggunakan fungsi LAG():

SELECT t1.* 
FROM foo t1
LEFT JOIN foo t2
ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;
Salin selepas log masuk

Pertanyaan ini menggunakan fungsi LAG() untuk mengenal pasti baris seterusnya dalam kumpulan. Jika tiada baris berikutnya (iaitu, baris semasa adalah yang terakhir dalam kumpulannya), pertanyaan akan mengembalikan baris semasa. Walaupun pendekatan ini boleh cekap, pendekatan ini mungkin tidak selalunya berprestasi seperti pertanyaan berasaskan JOIN yang dibincangkan di atas.

Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Baris Terakhir Setiap Kumpulan dengan Cekap dalam MySQL?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan