Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap daripada Jadual Pangkalan Data SQL Besar?
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>
Keputusan yang Diingini:
<code>ID | tag | version -----+-----+----- 2 | A | 20 3 | B | 99 4 | C | 30 5 | F | 40</code>
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:
<code class="language-sql">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;</code>
Pertanyaan ini berfungsi dalam dua langkah:
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.
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!