电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Oracle數據庫中Web分頁方法詳細介紹

瀏覽:3日期:2023-11-24 18:50:13
隨著Internet技術的發展,Web已越來越多的被應用到各行各業。傳統的基于大機或C/S結構的應用也正逐漸的為B/S(Browser/Server)結構所代替。而數據庫,作為保存著大量信息的容器,使得Web應用能夠提供更加豐富多彩,及時、個性化的信息。在Web應用中,我們經常碰到需要從數據庫搜索出滿足某個特征的數據記錄,再顯示給特定用戶。經常這些滿足條件的記錄如此之多,一方面在同一個頁面顯示顯得異常臃腫而不切實際,另一方面用戶通常也不會對他們都感愛好,他們似乎更關心按一定規則排序出現在某些開始位置的若干記錄。這就要求我們對滿足條件的數據進行分頁,將用戶更關心的記錄放在首頁,同時給予是否繼續瀏覽(或跳躍式閱讀)到指定頁甚至最后一頁的自由。在這里,我們希望和大家討論一下使用Oracle數據庫時的Web分頁方法。 我們說,一個好的分頁方法,它應當滿足以下幾個要求: 1. 數據庫處理的數據量最小; 2. 數據庫與Web應用服務器之間的數據量傳輸最小。 假定我們有如下的業務:行業產品表,10萬記錄,字段包括產品名稱,所在行業,市場價格。要求選擇某個行業時,列出該行業下所有產品,并按產品名稱排序,超過20條的,按每頁20條分頁: rudolf@TEST902>create table t nologging2 as select object_name prodUCt_name,mod(object_id,4)*10 category,3object_id price,rpad('a',300,'b') supplier4  from all_objects order by 2,15 /Table created.rudolf@TEST902>select count(*) from t;COUNT(*)----------21110用以上語句,我們快速生成了一個行業產品表,其中all_objects為Oracle的一個系統表(我們經常可以使用類似的方法生成測試數據)。接下來,我們創建了索引,并為使用CBO分析了表,分析顯示該表共用去1039個數據塊: rudolf@TEST902>create index t_category_pname_ind on t (category,product_name)2 nologging3 tablespace indx4 /Index created.rudolf@TEST902>analyze table t compute statistics2 for table3 for all indexes4 for all indexed columns5 /Table analyzed.rudolf@TEST902>select table_name,blocks, empty_blocks from user_tables where table_name = 'T';TABLE_NAME BLOCKS EMPTY_BLOCKS------------------------------ ---------- ------------T1039 113為了便于討論,我們先來看一下傳統的做法: rudolf@TEST902>select * from2  ( select rownum rnm, a.* from3 ( select * from t where category = &category_id4 order by product_name5 ) a6 ) where rnm between &minrnm and &maxrnm7這里我們使用了三個變量,其中category_id表示用戶感愛好的行業,而minrnm,maxrnm則來模擬Web程序控制分頁時傳入的最小、最大行號。我們希望選出行業為20,屬于第289頁的所有產品信息。我們猜測上述語句將按以下步驟執行: 1. 取出所有滿足category=&category_id的記錄; 2. 按product_name進行排序; 3. 在排序完畢的結果集中取出第&minrnm到&maxrnm記錄之間的數據。 rudolf@TEST902>set autot tracerudolf@TEST902>/Enter value for category_id: 20Enter value for minrnm: 4981Enter value for maxrnm: 500020 rows selected.Execution Plan0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=436 Card=5263 Bytes=1094704)10  VIEW (Cost=436 Card=5263 Bytes=1094704)21 COUNT32  VIEW (Cost=436 Card=5263 Bytes=1026285)43 SORT (ORDER BY) (Cost=436 Card=5263 Bytes=1010496)54  TABLE Access (BY INDEX ROWID) OF 'T' (Cost=284 Card=5263 Bytes=1010496)65 INDEX (RANGE SCAN) OF 'T_CATEGORY_PNAME_IND' (NON-UNIQUE) (Cost=31 Card=5263)Statistics0 recursive calls0 db block gets284 consistent gets0 physical reads0 redo size1829 bytes sent via SQL*Net to client514 bytes received via SQL*Net from client3 SQL*Net roundtrips to/from client1 sorts (memory)0 sorts (disk)20 rows processed我們可以根據執行計劃第二列的數字來閱讀計劃,即數字大的最先執行,如“5 index (range scan)”,數字相等時,按從上到下的順序執行。上述執行計劃顯示了與我們估計相同的順序,我們看到滿足where條件的記錄一共5263條左右(第4步中的 card=5263),它們全部被取出,并參與排序(第3步),并在將結果集返回給用戶前,一直在處理所有的5263條記錄。然而事實上用戶似乎只關心本頁即20條記錄。顯然它與我們關于數據庫處理量最小的要求相距甚遠。在分析部分,284個一致讀進一步說明數據庫處理了所有滿足條件的記錄(整個表占1039個數據塊,共4個擁有相近產品數的行業,則每個行業約占259個數據塊)。 現在,我們把上述語句換成: rudolf@TEST902>select * from t2  where category = &category_id3  order by product_name4 將滿足條件的所有記錄取到客戶端(在這里為Web應用服務器),然后利用編程語言對結果集分頁。以Java為例,可以使用ResultSet對象方法absolute直接定位記錄而方便地將結果集分頁。然而很顯然,它甚至滿足關于數據庫與Web應用服務器之間的數據量傳輸最小的要求,很多情況下將明顯影響性能,嚴重時甚至會導致Web應用服務器一端內存溢出。言歸正傳,我們開始引入我們的方法。 方法一:同分析傳統做法類似,我們先列出我們的方法: rudolf@TEST902>select * from2 ( select rownum rnm, a.* from3( select * from t where category = &category_id4order by category,product_name5) a where rownum <= &maxrnm6 ) where rnm >= &minrnm7與傳統做法不同,我們把對最大行號的判定從第三層移到了第二層。改變雖然簡單,然而它表達了一個完全不同的執行意圖。內部視圖: select rownum rnm, a.* from( select * from t where category = &category_idorder by category,product_name) a where rownum <= &maxrnm是8i引入的新操作,在執行計劃中,它體現為stopkey。這種操作專門為提取TOP n的需求做了優化。它需要排序字段預先建有索引,由于索引是已排序好的結構,因此取TOP n的問題,就變為從索引中直接從頭提取n個索引要害字,然后再根據索引就可快速的找到記錄并返回給用戶。從而有效避免了檢索全部記錄的情況。 rudolf@TEST902>set autot tracerudolf@TEST902>set verify offEnter value for category_id: 20Enter value for maxrnm: 20Enter value for minrnm: 120 rows selected.Execution Plan0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=284 Card=20 Bytes=4160)10  VIEW (Cost=284 Card=20 Bytes=4160)21 COUNT (STOPKEY)32  VIEW (Cost=284 Card=5263 Bytes=1026285)43 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=284 Card=5263 Bytes=1010496)54  INDEX (RANGE SCAN) OF 'T_CATEGORY_PNAME_IND' (NON-UNIQUE) (Cost=31 Card=5263)Statistics0 recursive calls0 db block gets7 consistent gets0 physical reads0 redo size1848 bytes sent via SQL*Net to client514 bytes received via SQL*Net from client3 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)20 rows processed應將count(stopkey)操作與table access(by index rowid)結合起來看,這樣一來,table access(by index rowid)實際上只處理了&maxrnm條記錄,這里為20條。
標簽: Oracle 數據庫
主站蜘蛛池模板: 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 304不锈钢无缝管_不锈钢管厂家 - 隆达钢业集团有限公司 | 818手游网_提供当下热门APP手游_最新手机游戏下载 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 安徽集装箱厂-合肥国彩钢结构板房工程有限公司 | 膏方加工_丸剂贴牌_膏滋代加工_湖北康瑞生物科技有限公司 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 打孔器,打孔钳厂家【温州新星德牌五金工具】 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 |