Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Kembali Baris Terakhir Setiap Kumpulan dalam MySQL dengan Cekap?
Mengembalikan Baris 'Terakhir' Setiap 'Kumpulan Oleh' dalam MySQL
Mengambil baris terakhir setiap set berkumpulan dalam MySQL dengan cekap ialah tugas biasa. Pendekatan sebelumnya mencadangkan pertanyaan menggunakan subkueri dalam klausa WHERE:
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
Walau bagaimanapun, penyelesaian alternatif mungkin menawarkan prestasi yang lebih baik:
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;
Pertanyaan ini menggunakan operasi JOIN untuk secara eksplisit sertai jadual asal ('foo') dengan jadual terbitan yang mengandungi nilai ID maksimum untuk setiap ID pengguna unik. Klausa ON memastikan bahawa hanya baris dengan ID yang sepadan dan ID pengguna digabungkan.
Untuk mengoptimumkan pertanyaan lagi, adalah disyorkan untuk membuat indeks pada lajur 'uid', kerana ia digunakan untuk mengumpulkan dan menyertai . Menggunakan EXPLAIN boleh memberikan cerapan tentang pelan pelaksanaan pertanyaan dan mengenal pasti kesesakan prestasi yang berpotensi.
Pendekatan lain, menggunakan operator LEFT JOIN, juga boleh mencapai hasil yang diingini:
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
Dalam pertanyaan ini , LEFT JOIN melakukan gabungan luar, memadankan baris daripada 'foo' berdasarkan kriteria 'uid' dan 'id'. Klausa WHERE memastikan bahawa hanya baris tanpa baris berikutnya dalam kumpulan yang sama dipilih, dengan berkesan mengembalikan baris terakhir untuk setiap ID pengguna.
Dengan mempertimbangkan pendekatan alternatif dan mengoptimumkan pertanyaan melalui analisis pengindeksan dan EXPLAIN, ia adalah mungkin untuk mencapai pengambilan baris terakhir yang cekap untuk setiap 'kumpulan oleh' dalam MySQL.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Baris Terakhir Setiap Kumpulan dalam MySQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!