發(fā)布時(shí)間:2024-01-24閱讀(16)

實(shí)際開(kāi)發(fā)過(guò)程中難免接觸到Oracle數(shù)據(jù)庫(kù)。而數(shù)據(jù)庫(kù)的分頁(yè)又是我們最常用的語(yǔ)句之一,而且面試問(wèn)的頻率也很高。Oracle數(shù)據(jù)庫(kù)的分頁(yè)不像Mysql數(shù)據(jù)庫(kù)用一個(gè)limit就搞定那么簡(jiǎn)單。該篇文章為大家介紹Oracle數(shù)據(jù)庫(kù)的通用寫(xiě)法,以便大家熟悉Oracle數(shù)據(jù)庫(kù)的分頁(yè)寫(xiě)法。
分頁(yè)查詢格式:

對(duì)比這兩種寫(xiě)法,絕大多數(shù)的情況下,第一個(gè)查詢的效率比第二個(gè)高得多。
這是因?yàn)樵贑BO 優(yōu)化模式下,Oracle可以將外層的查詢條件推到內(nèi)層查詢中,以提高內(nèi)層查詢的執(zhí)行效率。對(duì)于第一個(gè)查詢語(yǔ)句,第二層的查詢條件WHERE ROWNUM <= 20就可以被Oracle推入到內(nèi)層查詢中,這樣Oracle查詢的結(jié)果一旦超過(guò)了ROWNUM限制條件,就終止查詢將結(jié)果返回了。
而第二個(gè)查詢語(yǔ)句,由于查詢條件BETWEEN 11 AND 20是存在于查詢的第三層,而Oracle無(wú)法將第三層的查詢條件推到最內(nèi)層。因此,對(duì)于第二個(gè)查詢語(yǔ)句,Oracle最內(nèi)層返回給中間層的是所有滿足條件的數(shù)據(jù),而中間層返回給最外層的也是所有數(shù)據(jù)。數(shù)據(jù)的過(guò)濾在最外層完成,顯然這個(gè)效率要比第一個(gè)查詢低得多。
對(duì)于第一種理解的話還是從里面向外面更好一些,先是從一個(gè)表中獲得數(shù)據(jù)select * from 表名,再給這個(gè)表賦上RN的值并且將索取的行數(shù)確定為20行select a.*,rownum rn from (select * from 表名) a where rownum<=20,之后再確定從哪一行開(kāi)始select * from (select a.*,rownum rn from (selecct * from table_name) a where rownum<=20) where rn>=11
上面分析的查詢不僅僅是針對(duì)單表的簡(jiǎn)單查詢,對(duì)于最內(nèi)層查詢是復(fù)雜的多表聯(lián)合查詢或最內(nèi)層查詢包含排序的情況一樣有效。
最后祝大家工作順利,天天開(kāi)心!!!
歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-254341.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖