Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Rekod Terakhir dengan Cekap dalam Hubungan SQL Satu-dengan-Banyak?

Bagaimana untuk Mendapatkan Rekod Terakhir dengan Cekap dalam Hubungan SQL Satu-dengan-Banyak?

Barbara Streisand
Barbara Streisandasal
2025-01-19 12:26:09965semak imbas

How to Efficiently Retrieve the Last Records in a One-to-Many SQL Relationship?

SQL Menyertai untuk Mendapatkan Rekod Terkini dalam Hubungan Satu-dengan-Banyak

Pertanyaan pangkalan data selalunya melibatkan pengambilan semula entri terbaharu daripada perhubungan satu-ke-banyak. Bayangkan pangkalan data dengan jadual 'pelanggan' dan 'pembelian'; setiap pembelian adalah milik seorang pelanggan. Pendekatan ini cekap mendapatkan semula senarai pelanggan dan pembelian terbaharu mereka menggunakan satu penyata SELECT:

<code class="language-sql">SELECT c.*, p1.*
FROM customer c
JOIN purchase p1 ON (c.id = p1.customer_id)
LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND p1.date < p2.date)
WHERE p2.customer_id IS NULL;</code>

Penjelasan:

  1. INNER JOIN memautkan jadual 'pelanggan' dan 'pembelian' melalui 'customer_id', mengaitkan pelanggan dengan pembelian mereka.
  2. SERTAI LUAR KIRI mengenal pasti pembelian tambahan untuk setiap pelanggan dengan tarikh kemudian.
  3. Klausa WHERE menapis entri tambahan ini, hanya mengekalkan pembelian terbaharu bagi setiap pelanggan.

Pengoptimuman Prestasi: Pengindeksan

Untuk prestasi optimum, buat indeks komposit pada jadual 'pembelian' menggunakan lajur '(id_pelanggan, tarikh, id)'. Ini membolehkan carian pangkalan data yang cekap untuk pembelian berdasarkan pelanggan, tarikh dan ID.

Pertukaran Denormalisasi:

Menyimpan tarikh pembelian terakhir dalam jadual 'pelanggan' (penyahnormalan) boleh meningkatkan prestasi untuk pertanyaan pembelian terakhir yang kerap. Walau bagaimanapun, ini memperkenalkan lebihan data dan potensi masalah integriti.

HAD 1 Klausa: Alternatif yang Kurang Boleh Dipercayai

Jika ID jadual 'beli' dipesan tarikh secara konsisten, menggunakan LIMIT 1 dalam subkueri memudahkan pertanyaan. Walau bagaimanapun, kebolehpercayaan kaedah ini kurang konsisten daripada pendekatan LEFT OUTER JOIN. Kaedah LEFT OUTER JOIN biasanya lebih disukai kerana kekukuhannya.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Terakhir dengan Cekap dalam Hubungan SQL Satu-dengan-Banyak?. 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