Memilih Satu Baris daripada Setiap Kumpulan dengan Cekap
Dalam jadual produk yang besar dengan berjuta-juta rekod, pengoptimuman pertanyaan adalah penting untuk prestasi. Senario biasa ialah mendapatkan satu baris daripada setiap kumpulan jadual berdasarkan lajur tertentu, seperti ID maksimum untuk setiap kedai.
Pertanyaan Asal dan Isu Prestasi:
Pertanyaan awal yang digunakan untuk tugasan ini ialah:
SELECT id, product_name, store_id FROM product GROUP BY store_id ORDER BY id.
Walau bagaimanapun, pertanyaan ini menghadapi prestasi isu akibat operasi pengumpulan dan pengagregatan yang terlibat.
Pendekatan Disyorkan:
Penyelesaian yang cekap ialah menggunakan subkueri untuk menentukan ID maksimum bagi setiap kedai dan menyertainya ke jadual utama:
SELECT a.* FROM tableName a INNER JOIN ( SELECT store_ID, MAX(ID) max_ID FROM tableName GROUP BY store_ID ) b ON a.store_ID = b.store_ID AND a.ID = b.max_ID
Pertanyaan ini melaksanakan pengumpulan dan pengagregatan dalam subkueri, menghasilkan dalam prestasi yang lebih baik.
Petua Prestasi Tambahan:
Pemilihan Berbilang Baris:
Jika berbilang baris perlu diambil daripada setiap kumpulan, pertanyaan berikut boleh digunakan:
SELECT ID, product_Name, store_ID FROM tableName a WHERE ( SELECT COUNT(*) FROM tableName b WHERE b.store_ID = a.store_ID AND b.ID >= a.ID ) <= 2;
Pertanyaan ini mendapatkan semula sehingga dua baris daripada setiap kumpulan berdasarkan lajur ID.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Satu Baris setiap Kumpulan dengan Cekap daripada Jadual Pangkalan Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!