Oracle資料庫中高效率篩選前10筆記錄:子查詢與ROWNUM技術
本文旨在解決從HISTORY表中按STORAGE_GB排序,並排除符合特定條件的行,最終只選擇前10筆記錄的問題。直接使用ROWNUM限制結果在排序前會導致問題。
使用子查詢的解:
解決方案是建立子查詢,根據所有條件(包括排序順序)選擇所需的記錄。然後,使用該子查詢作為資料來源,利用ROWNUM選擇前10行。
<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>
使用EXISTS進行最佳化:
對於大型資料集,Oracle的ROWNUM效率不高。考慮使用EXISTS運算子代替NOT IN以提高效能。
<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>
(注意:LIMIT 10
在Oracle中不被直接支持,應使用 FETCH FIRST 10 ROWS ONLY
替代)
透過以上方法,可以有效率地從Oracle資料庫中篩選出符合條件的前10筆記錄。 選擇使用EXISTS
的版本可以顯著提升查詢效率,尤其是在處理大型資料集時。
以上是如何透過過濾高效選出Oracle中前10筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!