Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Satu Baris setiap Kumpulan dengan Cekap daripada Jadual Pangkalan Data Besar?

Bagaimana untuk Memilih Satu Baris setiap Kumpulan dengan Cekap daripada Jadual Pangkalan Data Besar?

Barbara Streisand
Lepaskan: 2024-12-31 01:04:08
asal
273 orang telah melayarinya

How to Efficiently Select One Row per Group from a Large Database Table?

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.
Salin selepas log masuk

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
Salin selepas log masuk

Pertanyaan ini melaksanakan pengumpulan dan pengagregatan dalam subkueri, menghasilkan dalam prestasi yang lebih baik.

Petua Prestasi Tambahan:

  • Pastikan jadual mempunyai indeks pada lajur ID dan store_id.
  • Pertimbangkan untuk menggunakan pelayan pangkalan data dengan sokongan untuk penyejajaran dan pengoptimuman ciri.

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan