Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap dalam SQL?

Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap dalam SQL?

DDD
DDDasal
2025-01-07 17:17:09327semak imbas

How Can I Efficiently Retrieve Maximum Values and Corresponding Data in SQL?

Mengoptimumkan Pertanyaan SQL: Mendapatkan Nilai Maksimum dan Data Berkaitan

Artikel ini menunjukkan kaedah yang cekap untuk mendapatkan nombor versi maksimum bagi setiap ID dan teg yang sepadan daripada jadual SQL yang besar. Elakkan kaedah yang kurang cekap seperti pertanyaan bersarang atau pengumpulan mudah.

Penyelesaian optimum menggunakan fungsi ROW_NUMBER():

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

Begini cara pertanyaan ini berfungsi:

  • Pertanyaan Dalaman: Ini memilih semua lajur (t.*) daripada YourTable (gantikan YourTable dengan nama jadual sebenar anda). Yang penting, ia memberikan pangkat (rnk) kepada setiap baris dalam setiap id partition, disusun mengikut version dalam tertib menurun. version tertinggi bagi setiap id menerima pangkat 1.
  • Pertanyaan Luar: Ini menapis hasil pertanyaan dalam, memilih hanya baris di mana rnk = 1. Ini dengan cekap mengasingkan version maksimum dan id dan tag yang berkaitan untuk setiap id unik.

Menggunakan ROW_NUMBER() memberikan kelebihan prestasi yang ketara berbanding pendekatan alternatif, terutamanya dengan set data yang besar. Ia mengelakkan overhed prestasi pertanyaan bersarang atau klausa GROUP BY dengan fungsi agregat, menjadikannya kaedah pilihan untuk mendapatkan semula data yang cekap dalam senario ini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai Maksimum dan Data Sepadan dengan Cekap dalam SQL?. 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