Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Rekod Terakhir dengan Cekap dalam Hubungan SQL Satu-dengan-Banyak?
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:
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!