ITPub博客

首页 > 数据库 > Oracle > 043.【FIRST_ROWS与ALL_ROWS效率比较】

043.【FIRST_ROWS与ALL_ROWS效率比较】

原创 Oracle 作者:limintjhn 时间:2013-01-06 20:13:04 0 删除 编辑

【FIRST_ROWS与ALL_ROWS效率比较】
--1.返回全部数据COST比较
SQL> set autot trace exp
SQL> select /*+all_rows*/*
2 from scott.t_group1 t
3 left join scott.t_zt z on(z.id=t.id);

Execution Plan
----------------------------------------------------------
Plan hash value: 1625069349

--------------------------------------------------------------------------------
----------

| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)|
Time |

--------------------------------------------------------------------------------
----------

| 0 | SELECT STATEMENT | | 4326K| 86M| | 11649 (4)|
00:02:20 |

|* 1 | HASH JOIN RIGHT OUTER| | 4326K| 86M| 4480K| 11649 (4)|
00:02:20 |

| 2 | TABLE ACCESS FULL | T_ZT | 254K| 1492K| | 92 (8)|
00:00:02 |

| 3 | TABLE ACCESS FULL | T_GROUP1 | 4326K| 61M| | 5682 (5)|
00:01:09 |

--------------------------------------------------------------------------------
----------


Predicate Information (identified by operation id):
---------------------------------------------------

1 - access("Z"."ID"(+)="T"."ID")

SQL> select /*+first_rows no_index(t)*/*
2 from scott.t_group1 t
3 left join scott.t_zt z on(z.id=t.id);

Execution Plan
----------------------------------------------------------
Plan hash value: 1214657265

--------------------------------------------------------------------------------
---------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| T
ime |

--------------------------------------------------------------------------------
---------

| 0 | SELECT STATEMENT | | 4326K| 86M| 4338K (1)| 1
4:27:37 |

| 1 | NESTED LOOPS OUTER | | 4326K| 86M| 4338K (1)| 1
4:27:37 |

| 2 | TABLE ACCESS FULL | T_GROUP1 | 4326K| 61M| 5682 (5)| 0
0:01:09 |

| 3 | TABLE ACCESS BY INDEX ROWID| T_ZT | 1 | 6 | 1 (0)| 0
0:00:01 |

|* 4 | INDEX UNIQUE SCAN | PRY_T_ZT | 1 | | 0 (0)| 0
0:00:01 |

--------------------------------------------------------------------------------
---------


Predicate Information (identified by operation id):
---------------------------------------------------

4 - access("Z"."ID"(+)="T"."ID")

2.在PL/SQL DEVELOPER中测试返回10条记录的用时
--用时0.2秒
select /*+all_rows*/*
from scott.t_group1 t
left join scott.t_zt z on(z.id=t.id);

--用时0.04秒
select /*+first_rows*/*
from scott.t_group1 t
left join scott.t_zt z on(z.id=t.id);

【小结】
1.FIRST_ROWS用的是NESTED LOOPS(COST为4338K),ALL_ROWS用的是HASH JION(COST为11649)
2.FIRST_ROWS展示前10条用时0.04秒,ALL_ROWS用时0.2秒
3.报表展示页面的SQL可以尝试使用FIRST_rows优化

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7901922/viewspace-1060026/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-02-03

  • 博文量
    53
  • 访问量
    36585