Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap daripada Jadual Pangkalan Data SQL Besar?

Bagaimana untuk Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap daripada Jadual Pangkalan Data SQL Besar?

Susan Sarandon
Lepaskan: 2025-01-07 17:21:41
asal
724 orang telah melayarinya

How to Efficiently Retrieve the Maximum Value and Corresponding Data from a Large SQL Database Table?

Mencari Nilai Maksimum dan Data Berkaitan dengan Cekap dalam Jadual SQL Besar

Selalunya, pertanyaan pangkalan data memerlukan mencari nilai maksimum dalam lajur dan mendapatkan semula data yang sepadan daripada lajur lain dalam baris yang sama. Ini amat mencabar dengan set data yang sangat besar. Pertimbangkan jadual yang perlu mencari nombor versi tertinggi untuk setiap ID unik, bersama dengan teg yang berkaitan:

Contoh Jadual:

<code>ID  |  tag  |  version
-----+-----+-----
1 |  A  |  10
2 |  A  |  20
3 |  B  |  99
4 |  C  |  30
5 |  F  |  40</code>
Salin selepas log masuk

Keputusan yang Diingini:

<code>ID  |  tag  |  version
-----+-----+-----
2  |  A  |  20
3  |  B  |  99
4  |  C  |  30
5  |  F  |  40</code>
Salin selepas log masuk

Untuk jadual dengan sekitar 28 juta baris, kaedah standard seperti pernyataan SELECT bersarang atau GROUP BY ringkas dengan MAX boleh menjadi sangat perlahan. Penyelesaian yang lebih cekap menggunakan ROW_NUMBER() fungsi tetingkap:

SELECT s.id, s.tag, s.version
FROM (
  SELECT t.*,
         ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk
  FROM YourTable t
) s
WHERE s.rnk = 1;
Salin selepas log masuk

Pertanyaan ini berfungsi dalam dua langkah:

  1. Pertanyaan Dalaman: Ia memberikan kedudukan unik (rnk) kepada setiap baris dalam setiap ID partition (kumpulan baris dengan ID yang sama). Kedudukan adalah berdasarkan lajur version dalam susunan menurun, bermakna versi tertinggi mendapat kedudukan 1.

  2. Pertanyaan Luar: Ia menapis hasil daripada pertanyaan dalam, memilih hanya baris di mana rnk = 1. Ini secara berkesan memberi kita baris dengan version maksimum untuk setiap ID.

Pendekatan ini mengelakkan pertanyaan bersarang dan operasi GROUP BY, menjadikannya lebih pantas untuk set data yang besar. Penggunaan ROW_NUMBER() menyediakan cara yang bersih dan cekap untuk mencapai hasil yang diinginkan.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap daripada Jadual Pangkalan Data SQL Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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