使用Oracle数据库时的Web分页方法
2007-05-07 12:07:51 来源:WEB开发网与传统做法不同,我们把对最大行号的判断从第三层移到了第二层。改变虽然简单,然而它表达了一个完全不同的执行意图。内部视图:
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条。
- ››使用linux中的quota教程
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››使用jxl生成带动态折线图的excel
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
更多精彩
赞助商链接