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
Susan Sarandonasal
2025-01-07 17:21:41702semak imbas

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>

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:

  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:
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