Masalah:
Cari kaedah yang lebih cekap untuk mendapatkan semula baris terakhir untuk setiap kumpulan dalam jadual MySQL, menggunakan pertanyaan yang serupa kepada:
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
Potensi Penyelesaian:
Pertimbangkan pertanyaan alternatif ini:
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
Penjelasan:
Pertanyaan ini Kiri Menyertai setiap baris dalam jadual dengan penggantinya berdasarkan lajur ID. Jika tiada pengganti wujud (iaitu, ia adalah baris terakhir dalam kumpulan), lajur t2.id akan menjadi NULL. Dengan menapis untuk NULL, kami mengasingkan baris terakhir setiap kumpulan dengan berkesan.
Nota Tambahan:
Gunakan EXPLAIN untuk menganalisis prestasi pertanyaan bagi pertanyaan asal dan alternatif penyelesaian.
Kaedah ini amat berguna untuk set data besar dan kumpulan kompleks. Untuk kes yang lebih mudah, pendekatan lain mungkin lebih cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Baris Terakhir setiap Kumpulan dengan Cekap dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!