Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mendapatkan Kembali Baris Terakhir Setiap Kumpulan dalam MySQL dengan Cekap?

Bagaimana untuk Mendapatkan Kembali Baris Terakhir Setiap Kumpulan dalam MySQL dengan Cekap?

Linda Hamilton
Linda Hamiltonasal
2024-11-17 02:32:03924semak imbas

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

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!

Kenyataan:
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