Tapis 10 rekod teratas dalam pangkalan data Oracle dengan cekap: teknologi subquery dan ROWNUM
Artikel ini bertujuan untuk menyelesaikan masalah pengisihan mengikut STORAGE_GB daripada jadual HISTORY, tidak termasuk baris yang memenuhi syarat tertentu dan akhirnya memilih hanya 10 rekod pertama. Menggunakan ROWNUM secara langsung untuk mengehadkan keputusan sebelum mengisih boleh menyebabkan masalah.
Penyelesaian menggunakan subkueri:
Penyelesaian adalah untuk mencipta subkueri yang memilih rekod yang diperlukan berdasarkan semua kriteria termasuk susunan isihan. Kemudian, gunakan subkueri ini sebagai sumber data dan gunakan ROWNUM untuk memilih 10 baris pertama.
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND APP_ID NOT IN ( SELECT APP_ID FROM HISTORY WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009' ) ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10;</code>
Gunakan EXISTS untuk pengoptimuman:
Untuk set data yang besar, ROWNUM Oracle tidak cekap. Pertimbangkan untuk menggunakan operator EXISTS dan bukannya NOT IN untuk meningkatkan prestasi.
<code class="language-sql">SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM HISTORY WHERE APP_ID = APP_ID AND TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009' ) ORDER BY STORAGE_GB DESC FETCH FIRST 10 ROWS ONLY;</code>
(Nota: LIMIT 10
tidak disokong secara langsung dalam Oracle, FETCH FIRST 10 ROWS ONLY
harus digunakan sebaliknya)
Melalui kaedah di atas, anda boleh menapis dengan cekap 10 rekod teratas yang memenuhi syarat daripada pangkalan data Oracle. Memilih versi menggunakan EXISTS
boleh meningkatkan kecekapan pertanyaan dengan ketara, terutamanya apabila memproses set data yang besar.
Atas ialah kandungan terperinci Bagaimana untuk Memilih 10 Rekod Teratas dalam Oracle dengan Cekap dengan Penapisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!