WEB开发网
开发学院数据库Oracle 使用Oracle数据库时的Web分页方法 阅读

使用Oracle数据库时的Web分页方法

 2007-05-07 12:07:51 来源:WEB开发网   
核心提示: 与传统做法不同,我们把对最大行号的判断从第三层移到了第二层,使用Oracle数据库时的Web分页方法(4),改变虽然简单,然而它表达了一个完全不同的执行意图,这样一来,table access(by index rowid)实际上只处理了&maxrnm条记录,内部视图:select row

与传统做法不同,我们把对最大行号的判断从第三层移到了第二层。改变虽然简单,然而它表达了一个完全不同的执行意图。内部视图: 
select rownum rnm, a.* from
( select * from t where category = &category_id
order by category,product_name
) a where rownum <= &maxrnm

是8i引入的新操作,在执行计划中,它体现为stopkey。这种操作专门为提取TOP n的需求做了优化。它需要排序字段预先建有索引,由于索引是已排序好的结构,因此取TOP n的问题,就变为从索引中直接从头提取n个索引关键字,然后再根据索引就可快速的找到记录并返回给用户。从而有效避免了检索全部记录的情况。rudolf@TEST902>set autot trace
rudolf@TEST902>set verify off
Enter value for category_id: 20
Enter value for maxrnm: 20
Enter value for minrnm: 1
20 rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer=FIRST_ROWS
  (Cost=284 Card=20 Byte
s=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)
Statistics
0 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
1848 bytes sent via SQL*Net to client
514 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
20 rows processed

应将count(stopkey)操作与table access(by index rowid)结合起来看,这样一来,table access(by index rowid)实际上只处理了&maxrnm条记录,这里为20条。

上一页  1 2 3 4 

Tags:使用 Oracle 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接