最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分頁技術(shù)原理與實(shí)現(xiàn)之分頁的意義及方法(一)

 更新時(shí)間:2016年06月12日 09:28:14   作者:KaneTing  
這篇文章主要介紹了分頁技術(shù)原理與實(shí)現(xiàn)第一篇:為什么要進(jìn)行分頁及怎么分頁,感興趣的小伙伴們可以參考一下

什么是分頁技術(shù)
 分頁,是一種將所有數(shù)據(jù)分段展示給用戶的技術(shù).用戶每次看到的不是全部數(shù)據(jù),而是其中的一部分,如果在其中沒有找到自習(xí)自己想要的內(nèi)容,用戶可以通過制定頁碼或是翻頁的方式轉(zhuǎn)換可見內(nèi)容,直到找到自己想要的內(nèi)容為止.其實(shí)這和我們閱讀書籍很類似.
  下頁顯示了兩種常見的分頁方式:

分頁的意義
 分頁確實(shí)有效,但它一定會加大系統(tǒng)的復(fù)雜度,但可否不分頁呢?如果數(shù)據(jù)量少的話當(dāng)然可以.但是對于企業(yè)信息系統(tǒng)來說數(shù)據(jù)量不會限制在一個(gè)小范圍內(nèi).如果不顧一切的Select * from某個(gè)表,再將返回的數(shù)據(jù)一古腦的扔給客戶,即使客戶能夠忍受成千上萬足夠讓人眼花繚亂的表格式數(shù)據(jù),繁忙的網(wǎng)絡(luò),緊張的服務(wù)器也會提出它們無聲的抗議,甚至有時(shí)會以徹底的罷工作為終結(jié).這個(gè)結(jié)局有點(diǎn)像古代為所欲為的暴君和他忍無可忍的臣民之間的故事.
  程序員不是暴君,他希望程序使生活變得更好而不是更糟.考慮到企業(yè)信息系統(tǒng)多是三層甚至更多層架構(gòu)的事實(shí),程序員在向客戶展示數(shù)據(jù)時(shí)都應(yīng)該采取分頁的形式.如果他不想被抱怨淹沒或是半夜被電話驚醒的話。

從請求發(fā)起到返回?cái)?shù)據(jù)的整個(gè)過程
 現(xiàn)在你已經(jīng)下定決心想要分頁了,在動(dòng)手書寫代碼之前,先讓我們回想一下,在典型的三層架構(gòu)中,從請求發(fā)起到返回?cái)?shù)據(jù)的整個(gè)過程.如下所示:

在哪里進(jìn)行分頁
 從上面的圖中我們可以觀察得知,在SQL語句處理完畢后,數(shù)據(jù)庫,WebApplication和Browser都能進(jìn)行分頁,那在哪里分頁好呢?
  判斷的標(biāo)準(zhǔn)是速度,顯而易見,數(shù)據(jù)庫服務(wù)器,Web應(yīng)用服務(wù)器和客戶端之間是網(wǎng)絡(luò),如果網(wǎng)絡(luò)傳遞的數(shù)據(jù)量越少,則客戶端獲得響應(yīng)的速度越快.而且一般來說,數(shù)據(jù)庫服務(wù)器和Web應(yīng)用服務(wù)器的處理能力一般比客戶端要強(qiáng)很多.從這兩點(diǎn)來看,在客戶端分頁的方案是最不可取的.
  其次就剩下了在Web服務(wù)器端分頁和在數(shù)據(jù)庫端分頁兩種方式了,如果選擇在Web服務(wù)器端分頁的話,大部分的被過濾掉的數(shù)據(jù)還是被傳輸?shù)搅薟eb應(yīng)用服務(wù)器端,與其這樣還不如直接在數(shù)據(jù)庫端進(jìn)行分頁.
 因此比較好的分頁做法應(yīng)該是每次翻頁的時(shí)候只從數(shù)據(jù)庫里檢索頁面大小的塊區(qū)的數(shù)據(jù)。這樣雖然每次翻頁都需要查詢數(shù)據(jù)庫,但查詢出的記錄數(shù)很少,網(wǎng)絡(luò)傳輸數(shù)據(jù)量不大,如果使用連接池更可以略過最耗時(shí)的建立數(shù)據(jù)庫連接過程。而在數(shù)據(jù)庫端有各種成熟的優(yōu)化技術(shù)用于提高查詢速度,比在應(yīng)用服務(wù)器層做緩存有效多了。 

分頁的SQL語句
 如果我們是通過JDBC的方式訪問數(shù)據(jù)庫,那么就有必要根據(jù)數(shù)據(jù)庫類型采取不同的SQL分頁語句,對于MySQL數(shù)據(jù)庫,我們可以采用limit語句進(jìn)行分頁,對于Oracle數(shù)據(jù)庫,我們可以采用rownum的方式進(jìn)行分頁.
 (1)MySql的Limit m,n語句
 Limit后的兩個(gè)參數(shù)中,參數(shù)m是起始下標(biāo),它從0開始;參數(shù)n是返回的記錄數(shù)。我們需要分頁的話指定這兩個(gè)值即可
 (2)Oracle數(shù)據(jù)庫的rownum
 在Oracle數(shù)據(jù)庫中,分頁方式?jīng)]有MySql這樣簡單,它需要依靠rownum來實(shí)現(xiàn).
Rownum表示一條記錄的行號,值得注意的是它在獲取每一行后才賦予.因此,想指定rownum的區(qū)間來取得分頁數(shù)據(jù)在一層查詢語句中是無法做到的,要分頁還要進(jìn)行一次查詢.

 SELECT * FROM 
(
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
WHERE ROWNUM <= 40
)
WHERE RN >= 21

 其中最內(nèi)層的查詢SELECT * FROM TABLE_NAME表示不進(jìn)行翻頁的原始查詢語句。ROWNUM <= 40和RN >= 21控制分頁查詢的每頁的范圍。
 上面給出的這個(gè)分頁查詢語句,在大多數(shù)情況擁有較高的效率。分頁的目的就是控制輸出結(jié)果集大小,將結(jié)果盡快的返回。在上面的分頁查詢語句中,這種考慮主要體現(xiàn)在WHERE ROWNUM <= 40這句上。
 選擇第21到40條記錄存在兩種方法,一種是上面例子中展示的在查詢的第二層通過ROWNUM <= 40來控制最大值,在查詢的最外層控制最小值。而另一種方式是去掉查詢第二層的WHERE ROWNUM <= 40語句,在查詢的最外層控制分頁的最小值和最大值。這是,查詢語句如下:

 SELECT * FROM 
(
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
)
WHERE RN BETWEEN 21 AND 40

 對比這兩種寫法,絕大多數(shù)的情況下,第一個(gè)查詢的效率比第二個(gè)高得多。
 這是由于CBO優(yōu)化模式下,Oracle可以將外層的查詢條件推到內(nèi)層查詢中,以提高內(nèi)層查詢的執(zhí)行效率。對于第一個(gè)查詢語句,第二層的查詢條件WHERE ROWNUM <= 40就可以被Oracle推入到內(nèi)層查詢中,這樣Oracle查詢的結(jié)果一旦超過了ROWNUM限制條件,就終止查詢將結(jié)果返回了。
 而第二個(gè)查詢語句,由于查詢條件BETWEEN 21 AND 40是存在于查詢的第三層,而Oracle無法將第三層的查詢條件推到最內(nèi)層(即使推到最內(nèi)層也沒有意義,因?yàn)樽顑?nèi)層查詢不知道RN代表什么)。因此,對于第二個(gè)查詢語句,Oracle最內(nèi)層返回給中間層的是所有滿足條件的數(shù)據(jù),而中間層返回給最外層的也是所有數(shù)據(jù)。數(shù)據(jù)的過濾在最外層完成,顯然這個(gè)效率要比第一個(gè)查詢低得多。
 上面分析的查詢不僅僅是針對單表的簡單查詢,對于最內(nèi)層查詢是復(fù)雜的多表聯(lián)合查詢或最內(nèi)層查詢包含排序的情況一樣有效。

精彩專題分享:

SQL Server分頁技術(shù)總結(jié)http://m.fzitv.net/Special/604.htm

ASP.NET分頁功能操作http://m.fzitv.net/Special/149.htm

javascript分頁功能操作http://m.fzitv.net/Special/469.htm

jquery分頁功能操作http://m.fzitv.net/Special/465.htm

php分頁功能操作http://m.fzitv.net/Special/236.htm

 其實(shí)分頁技術(shù)還有很多其它技術(shù),比如:Struts、hibernate等等都可實(shí)現(xiàn)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL 權(quán)限控制詳解

    MySQL 權(quán)限控制詳解

    這篇文章主要介紹了MySQL 權(quán)限控制詳解的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • 微信開發(fā)中mysql字符編碼問題

    微信開發(fā)中mysql字符編碼問題

    本文給大家介紹微信開發(fā)過程中mysql字符編碼問題,本文介紹的非常詳細(xì),感興趣的朋友一起來學(xué)習(xí)吧
    2015-08-08
  • 數(shù)據(jù)庫索引知識點(diǎn)整理

    數(shù)據(jù)庫索引知識點(diǎn)整理

    這篇文章主要介紹了數(shù)據(jù)庫索引知識點(diǎn)整理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考
    2021-01-01
  • MySQL統(tǒng)計(jì)函數(shù)GROUP_CONCAT使用陷阱分析

    MySQL統(tǒng)計(jì)函數(shù)GROUP_CONCAT使用陷阱分析

    這篇文章主要介紹了MySQL統(tǒng)計(jì)函數(shù)GROUP_CONCAT使用中的陷阱,結(jié)合實(shí)例形式分析了GROUP_CONCAT用于統(tǒng)計(jì)時(shí)的長度限制問題與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • Mysql NULL導(dǎo)致的神坑

    Mysql NULL導(dǎo)致的神坑

    這篇文章主要介紹了Mysql NULL導(dǎo)致的神坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Linux下徹底卸載mysql詳解

    Linux下徹底卸載mysql詳解

    如何在Linux下徹底的卸載MySQL數(shù)據(jù)庫呢? 下面這篇文章就給大家總結(jié)、整理了一下在Linux平臺下徹底卸載MySQL的方法。 文中通過圖文及示例代碼介紹的很詳細(xì),相信對大家的理解和學(xué)習(xí)很有幫助,下面有需要的朋友們來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • MySQL數(shù)據(jù)庫的實(shí)時(shí)備份知識點(diǎn)詳解

    MySQL數(shù)據(jù)庫的實(shí)時(shí)備份知識點(diǎn)詳解

    本篇文章給大家分享了關(guān)于MySQL數(shù)據(jù)庫的實(shí)時(shí)備份知識點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2018-08-08
  • mysql免安裝沒有任何root權(quán)限

    mysql免安裝沒有任何root權(quán)限

    這篇文章主要介紹了mysql免安裝沒有任何root權(quán)限的安裝與配置教程,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友參考下
    2017-01-01
  • MySQL 5.7.22 二進(jìn)制包安裝及免安裝版Windows配置方法

    MySQL 5.7.22 二進(jìn)制包安裝及免安裝版Windows配置方法

    這篇文章通過實(shí)例代碼給大家介紹了MySQL 5.7.22 二進(jìn)制包安裝教程,文章末尾給大家補(bǔ)充介紹了mysql 5.7.22 免安裝版Windows配置方法,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-08-08
  • mysql刪除操作其實(shí)是假刪除問題

    mysql刪除操作其實(shí)是假刪除問題

    這篇文章主要介紹了mysql刪除操作其實(shí)是假刪除問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

浮山县| 桐乡市| 勐海县| 威信县| 突泉县| 宁南县| 乌鲁木齐市| 蒙城县| 江山市| 蒙城县| 简阳市| 澜沧| 贵定县| 桑日县| 岚皋县| 乐平市| 巴青县| 柏乡县| 阿拉善盟| 泰兴市| 资兴市| 潍坊市| 石泉县| 石河子市| 古交市| 肃南| 河东区| 望谟县| 崇州市| 三穗县| 平度市| 赣州市| 微山县| 象山县| 长宁县| 长泰县| 汤原县| 呼图壁县| 禄劝| 巴塘县| 商水县|