查看: 1956|回复: 1

我看PINER写的分页查询优化的相关文章,实验发现FIRST_ROWS没起作用

[复制链接]
论坛徽章:
16
数据库板块每日发贴之星
日期:2007-05-10 01:02:022012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:43:352010广州亚运会纪念徽章:乒乓球
日期:2010-10-14 10:59:16ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25数据库板块每日发贴之星
日期:2010-05-09 01:01:01数据库板块每日发贴之星
日期:2010-03-14 01:01:09数据库板块每日发贴之星
日期:2007-11-13 01:04:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2011-11-9 09:06 | 显示全部楼层 |阅读模式
本帖最后由 fjliangrq 于 2011-11-9 09:33 编辑

这是很早以前的ITPUB的那本数据库性能优化的那本书,好多ITUB高人在写,其中分页是PINER写的。
--构造脚本部分:
drop table test purge;
create table test as select * from dba_objects;
insert into test select * from test;
insert into test select * from test;
insert into test select * from test;
insert into test select * from test;
commit;
--记录数大致80万。

create table page_test as select rownum id,t.* from test t;
create index ind_page_test_id on page_test(id);
exec dbms_stats.gather_table_stats(user,'PAGE_TEST',cascade => true);

--开始实验测试部分:
set timing on
set linesize 1000
set autotrace traceonly

SQL> select * from (
  2  select rownum rn,a.object_name from page_test a, page_test b,page_test c where a.id=b.id and b.id=c.id
  3  and rownum<=5)
  4  where rn>=1;
已用时间:  00: 00: 00.00
执行计划
----------------------------------------------------------
Plan hash value: 3741318282
------------------------------------------------------------------------------------------
| Id  | Operation                     | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |                            |     5 |   395 |    22   (0)| 00:00:01 |
|*  1 |  VIEW                          |                            |     5 |   395 |    22   (0)| 00:00:01 |
|*  2 |   COUNT STOPKEY        |                             |       |       |            |          |
|   3 |    NESTED LOOPS          |                              |     5 |   180 |    22   (0)| 00:00:01 |
|   4 |     NESTED LOOPS         |                              |     5 |   160 |    12   (0)| 00:00:01 |
|   5 |      TABLE ACCESS FULL | PAGE_TEST             |   877K|    23M|     2   (0)| 00:00:01 |
|*  6 |      INDEX RANGE SCAN  | IND_PAGE_TEST_ID |     1 |     4 |     2   (0)| 00:00:01 |
|*  7 |     INDEX RANGE SCAN   | IND_PAGE_TEST_ID |     1 |     4 |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("RN">=1)
   2 - filter(ROWNUM<=5)
   6 - access("A"."ID"="B"."ID")
   7 - access("B"."ID"="C"."ID")

统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         31  consistent gets
          0  physical reads
          0  redo size
        563  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          5  rows processed



SQL> select * from (
  2  select /*+first_rows*/ rownum rn,a.object_name from page_test a, page_test b,page_test c where a.id=b.id and b.id=c.id
  3  and rownum<=5)
  4  where rn>=1;
已用时间:  00: 00: 00.00
执行计划
----------------------------------------------------------
Plan hash value: 3741318282
------------------------------------------------------------------------------------------
| Id  | Operation             | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |                  |     5 |   395 |    22   (0)| 00:00:01 |
|*  1 |  VIEW                 |                  |     5 |   395 |    22   (0)| 00:00:01 |
|*  2 |   COUNT STOPKEY       |                  |       |       |            |          |
|   3 |    NESTED LOOPS       |                  |     5 |   180 |    22   (0)| 00:00:01 |
|   4 |     NESTED LOOPS      |                  |     5 |   160 |    12   (0)| 00:00:01 |
|   5 |      TABLE ACCESS FULL| PAGE_TEST        |   877K|    23M|     2   (0)| 00:00:01 |
|*  6 |      INDEX RANGE SCAN | IND_PAGE_TEST_ID |     1 |     4 |     2   (0)| 00:00:01 |
|*  7 |     INDEX RANGE SCAN  | IND_PAGE_TEST_ID |     1 |     4 |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("RN">=1)
   2 - filter(ROWNUM<=5)
   6 - access("A"."ID"="B"."ID")
   7 - access("B"."ID"="C"."ID")

统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         31  consistent gets
          0  physical reads
          0  redo size
        563  bytes sent via SQL*Net to client
        400  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          5  rows processed
SQL>



我这是跑文中PINER提到的构造的脚本,文中说差异很大,还比较逻辑读的个数,比较时间的差别,而我这却感觉一点差异都没有。




论坛徽章:
16
数据库板块每日发贴之星
日期:2007-05-10 01:02:022012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262011新春纪念徽章
日期:2011-02-18 11:43:352010广州亚运会纪念徽章:乒乓球
日期:2010-10-14 10:59:16ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25数据库板块每日发贴之星
日期:2010-05-09 01:01:01数据库板块每日发贴之星
日期:2010-03-14 01:01:09数据库板块每日发贴之星
日期:2007-11-13 01:04:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
 楼主| 发表于 2011-11-9 10:37 | 显示全部楼层
UP

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表