小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用分頁查詢來適應(yīng)挖掘海量數(shù)據(jù)的需求-數(shù)據(jù)庫專家|QQread.com

 ShangShujie 2007-04-13

使用分頁查詢來適應(yīng)挖掘海量數(shù)據(jù)的需求

廣告 插畫 創(chuàng)意 動漫 Logo 包裝 繪畫 鼠繪 3D 時(shí)尚 卡通 網(wǎng)站 CG 藝術(shù) 攝影


來源: 作者:tangl_99 2006-05-16 出處:巧巧讀書 
 oracle  mysql  

   數(shù)據(jù)挖掘各類算法中,常常需要遍歷整個(gè)數(shù)據(jù)庫(表)?,F(xiàn)實(shí)中的數(shù)據(jù)庫可能十分大,往往不可能通過一個(gè)簡單的Select *的方式遍歷提取數(shù)據(jù)表內(nèi)的所有元組。 直接用Select * 的方式存在兩大問題,一是Select *過后,可能要等很久數(shù)據(jù)庫才能將所有信息提交完畢,第二是得到的結(jié)果可能是很大,遠(yuǎn)遠(yuǎn)超過內(nèi)存的限制。

   現(xiàn)在各種主流的數(shù)據(jù)庫都支持了分頁查詢的方式。

  Oracle為例,通過rownum關(guān)鍵字可以獲取指定的行區(qū)間。
 
比如:  Select * from XX.TABLE1 where rownum <= 100。不過Oracle的rownum有點(diǎn)特別的就是,rownum必須從1開始,如果直接這樣寫就不行了: Select * from XX.TABLE1 where rownum between 50 and 100。
  而實(shí)際上,我們可以這樣來寫:SELECT * from (select n.*,rownum num from XX.TABLE1 n WHERE rownum <=100) where num >= 50;

  MySQL為例,提供了limit關(guān)鍵字,更加方便獲取中間某區(qū)間的行數(shù)據(jù)。
 
比如: Select * from TABLE1 limit 50,100。 MySQL的limit關(guān)鍵字用起來比Oracle要方便一些。不過各個(gè)數(shù)據(jù)庫的分頁查詢的速度我倒沒有研究過,網(wǎng)上聽一些高手們說,Oracle提供的分頁查詢效率要高一些。

  Hibernate這樣的數(shù)據(jù)持久層提供的分頁查詢,可以屏蔽掉各個(gè)不同的數(shù)據(jù)庫之間具體SQL實(shí)現(xiàn)差異。
 
Hiberante這樣的數(shù)據(jù)持久層工具一大好處就是可以屏蔽掉不同數(shù)據(jù)庫的之間的某些細(xì)節(jié)差異。分頁查詢在不同的數(shù)據(jù)庫上實(shí)現(xiàn)的SQL不一樣,所以要統(tǒng)一,最好使用Hibernate這樣的工具。
  Query q = session.createQuery("from Cat as c");
  q.setFirstResult(50);
  q.setMaxResults(100);
  List l = q.list();

   網(wǎng)上到處都可以搜尋到關(guān)于Hibernate內(nèi)部實(shí)現(xiàn)分頁查詢的解讀的文章。可以看到,Hibernate內(nèi)部也是通過rownum,limit這些關(guān)鍵字來實(shí)現(xiàn)分頁的。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多