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;
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;
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;
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!