分頁查詢oracle魁淳,mysql實現(xiàn)方式詳解

分頁查詢

  分頁查詢在查詢業(yè)務(wù)當(dāng)中十分常見的情況层宫。那么如何去做好分頁查詢呢焊虏。

排序

首先分頁查詢很重要的一點是排序际度。只有一個穩(wěn)定的排序才能保證分頁數(shù)據(jù)的準(zhǔn)確性。
簡單解析一下排序的穩(wěn)定性:
比如說有數(shù)據(jù)結(jié)構(gòu)如下:

class P {
     Integer age,
     String name
}

有以下的一組數(shù)據(jù)作為輸入進(jìn)行排序:

[
{
   'age' = 3,
   'name' = "A"
},
{
   'age' = 1,
   'name' = "B"
},
{
   'age' = 1,
   'name' = "C"
}
]

在這里,如果按照age來排序届氢,如果會出現(xiàn):

[
{
   'age' = 1,
   'name' = "B"
},
{
   'age' = 1,
   'name' = "C"
},
{
   'age' = 3,
   'name' = "A"
}
]

[
{
   'age' = 1,
   'name' = "C"
},
{
   'age' = 1,
   'name' = "B"
},
{
   'age' = 3,
   'name' = "A"
}
]

這兩種結(jié)果。
如果兩種結(jié)果都會出現(xiàn)的排序稱為不穩(wěn)定排序覆旭。如果只會出現(xiàn)一種情況的稱為穩(wěn)定排序
簡單來講退子,穩(wěn)定排序可以保證排序結(jié)果的唯一,那么分頁的時候可以避免出現(xiàn)重復(fù)數(shù)據(jù)的情況--如果第一次分頁查詢的排序結(jié)果是第一種型将,翻到下一頁查詢的排序結(jié)果是第二種那么第二頁還會出現(xiàn)name=C的數(shù)據(jù)寂祥,出現(xiàn)重復(fù)數(shù)據(jù)。

排序穩(wěn)定性的決定因數(shù)

在相同的輸入數(shù)據(jù)的情況下七兜,排序的穩(wěn)定性和排序的算法是直接相關(guān)的丸凭。
常見的算法穩(wěn)定性如下:
1.冒泡排序:穩(wěn)定
2.選擇排序:不穩(wěn)定
3.插入排序:穩(wěn)定
4.快速排序:不穩(wěn)定
5.歸并排序:穩(wěn)定
6.基數(shù)排序:穩(wěn)定
7.希爾排序:不穩(wěn)定
8.堆排序:不穩(wěn)定

數(shù)據(jù)庫在涉及很大的數(shù)據(jù)集繼續(xù)排序的時候,會使用磁盤。包括使用快速排序惜犀,歸并排序在內(nèi)的排序算法铛碑。所以不保證排序的穩(wěn)定性。
所以應(yīng)該考慮更多的鍵值作為排序的標(biāo)準(zhǔn)虽界,保證排序的唯一性汽烦。
像上面的例子為了保證排序的唯一性,可以使用age+name來實現(xiàn)莉御。
這是無論使用MySql還是Oracle 做分頁都需要考慮的地方撇吞。
當(dāng)然有特殊的情況是:使用索引來排序。這種情況下一般都是有序的颈将。
但是你要考慮優(yōu)化器梢夯,某些情況下索引失效的情況。

MySql實現(xiàn)

前端傳頁碼+頁大小

select xx,xxx from T where 條件 order by order_column limit offset,size

這種的話需要保證where條件之后結(jié)果集足夠小晴圾,不然后面翻頁會有比較大的開銷

使用ID鍵值進(jìn)行翻頁

這種場景下颂砸,一般表有一個唯一鍵值ID。前端通過傳鍵值ID+上翻頁或者下翻頁的方式進(jìn)行查詢死姚。一般都不會有什么新能問題

--下翻頁
select xxx,xxxx from T where id > ID order by id limit size
--上翻頁
select * from (select xx,xxx from T where id < ID order by id desc limit size ) as a order a.id

oracle 實現(xiàn)

oracle由于沒有l(wèi)imit人乓,實現(xiàn)起來會更復(fù)雜一些,需要使用到rownum

前端傳頁碼+頁大小

 select * from 
              (select rownum rn,t1.* from 
                                      (select xx,xxx from T where xxx=xxxx order by xxx) t1 
               where rownum < maxRowNum)t2  
where t2.rn > offset 

maxRowNum 是通過頁碼和頁大小計算出來的最大的行

使用ID鍵值進(jìn)行翻頁

這種場景下都毒,一般表有一個唯一鍵值ID色罚。前端通過傳鍵值ID+上翻頁或者下翻頁的方式進(jìn)行查詢。一般都不會有什么新能問題

--下翻頁
select * from (select xxx,xxxx from T where id > ID order by id ) where rownum < size
--上翻頁
select * from (select xx,xxx from T where id < ID order by id desc ) where rownum < size  as a order a.id
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末账劲,一起剝皮案震驚了整個濱河市戳护,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瀑焦,老刑警劉巖腌且,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異榛瓮,居然都是意外死亡铺董,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門禀晓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來精续,“玉大人,你說我怎么就攤上這事粹懒≈馗叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵凫乖,是天一觀的道長堪夭。 經(jīng)常有香客問我愕把,道長,這世上最難降的妖魔是什么森爽? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮嚣镜,結(jié)果婚禮上爬迟,老公的妹妹穿的比我還像新娘。我一直安慰自己菊匿,他們只是感情好付呕,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跌捆,像睡著了一般徽职。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佩厚,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天姆钉,我揣著相機與錄音,去河邊找鬼抄瓦。 笑死潮瓶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钙姊。 我是一名探鬼主播毯辅,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煞额!你這毒婦竟也來了思恐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤膊毁,失蹤者是張志新(化名)和其女友劉穎胀莹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媚媒,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡嗜逻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缭召。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栈顷。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嵌巷,靈堂內(nèi)的尸體忽然破棺而出萄凤,到底是詐尸還是另有隱情,我是刑警寧澤搪哪,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布靡努,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惑朦。R本人自食惡果不足惜兽泄,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漾月。 院中可真熱鬧病梢,春花似錦、人聲如沸梁肿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吩蔑。三九已至钮热,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烛芬,已是汗流浹背隧期。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛀骇,地道東北人厌秒。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像擅憔,于是被迫代替她去往敵國和親鸵闪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容