先來看兩段代碼:
第一段代碼要比第二段高效很多,這是由于在CBO 優(yōu)化模式下,Oracle可以將外層的查詢條件推到內(nèi)層查詢中,以提高內(nèi)層查詢的執(zhí)行效率。第一段代碼中,第二層的查詢條件WHERE ROWNUM <= 40就可以被Oracle推入到內(nèi)層查詢中,這樣Oracle查詢的結(jié)果一旦超過了ROWNUM限制條件,就終止查詢將結(jié)果返回了。
ROWNUM是一個偽列,用于記錄返回結(jié)果集中每一行的行號。ROWNUM是在查詢結(jié)果返回之后計算的,因此它并不是存儲在表中的實際列。ROWNUM的作用是用于限制查詢結(jié)果的行數(shù),可以在SELECT語句中使用WHERE子句和ORDER BY子句,實現(xiàn)分頁查詢或篩選查詢結(jié)果。
其中,start_row和end_row分別表示查詢的起始行和結(jié)束行。
舉例說明:
查詢operation表前五行
需要注意:1.Rownum是Oracle數(shù)據(jù)庫中的一種偽列,它不是一個真實的列,而是Oracle在運(yùn)行時自動分配給每一行的一個行號。
2.ROWNUM是在查詢結(jié)果返回之后再進(jìn)行排序的,因此需要使用子查詢來實現(xiàn)分頁查詢
3.在使用ROWNUM函數(shù)實現(xiàn)分頁查詢時,需要注意排序的方式,以確保查詢結(jié)果的正確性。