Bagaimana untuk Cekap Mengambil Baris Terakhir untuk Setiap Kumpulan dalam Kumpulan MySQL Dengan Pertanyaan?

Patricia Arquette
Lepaskan: 2024-11-14 18:44:02
asal
211 orang telah melayarinya

How to Efficiently Fetch the Last Row for Each Group in MySQL Group By Queries?

Mengoptimumkan Pengambilan Baris Terakhir dalam Kumpulan MySQL Melalui Pertanyaan

Dalam MySQL, mendapatkan semula baris terakhir untuk setiap kumpulan set data terkumpul memerlukan pendekatan yang cekap. Satu strategi biasa ialah kaedah subkueri berkorelasi:

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

Walaupun kaedah ini berfungsi, ia boleh menjadi mahal dari segi pengiraan. Alternatif yang lebih cekap ialah menggunakan gabungan dengan subkueri, seperti yang ditunjukkan dalam pertanyaan berikut:

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

Pendekatan ini mengoptimumkan prestasi dengan pra-pengiraan ID maksimum untuk setiap kumpulan dalam subkueri. Dengan menyertai nilai yang diprakira ini, pertanyaan boleh mendapatkan semula baris terakhir untuk setiap kumpulan dengan cekap.

Selain itu, menggunakan EXPLAIN pada kedua-dua pertanyaan akan memberikan cerapan berharga tentang rancangan pelaksanaan dan penggunaan sumber, membolehkan pengoptimuman selanjutnya . Alternatif lain ialah menggunakan kaedah LEFT JOIN:

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 mengenal pasti baris terakhir untuk setiap kumpulan dengan meninggalkan menyertai pada baris berikutnya dan menapis baris yang mempunyai nilai bukan nol ID. Akhirnya, pilihan pendekatan pengoptimuman bergantung pada data khusus dan keperluan prestasi aplikasi.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengambil Baris Terakhir untuk Setiap Kumpulan dalam Kumpulan MySQL Dengan Pertanyaan?. 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