ITPub博客

首页 > 数据库 > Oracle > Oracle 执行计划中access 和 filter的区别

Oracle 执行计划中access 和 filter的区别

原创 Oracle 作者:gholay 时间:2014-04-06 21:36:22 0 删除 编辑

一、简要说明:

    Prediceate(谓词):一个查询中的WHERE限制条件。

    在查看执行计划的信息中,经常会看到两个谓词filter和access,它们的区别是什么,理解了这个两个词对我们解读Oracle的执行计划信息会有所帮助。

    简单地说,执行计划如果显示是access,就表示这个谓词条件的值将会影响数据的访问路径(表还是索引),filter表示谓词条件的值并不会影响数据访问路径,只起到过滤的作用

二、举例说明:
----创建一张表echo----
SQL> create table echo as select * from dba_objects;


Table created.


SQL> set autotrace trace exp;
SQL> set linesize 150;
SQL> select * from echo where object_id=1000;


Execution Plan
----------------------------------------------------------
Plan hash value: 642657756


--------------------------------------------------------------------------
| Id  | Operation      | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |     |    12 |  2484 |   289   (1)| 00:00:04 |
|*  1 |  TABLE ACCESS FULL| ECHO |    12 |  2484 |   289   (1)| 00:00:04 |
--------------------------------------------------------------------------


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


   1 - filter("OBJECT_ID"=1000)  ----因为表echo没有创建索引,执行计划没有选择数据访问路径的余地,谓词条件在这里只是起到数据过滤的作用,所以使用了filter。


Note
-----
   - dynamic sampling used for this statement (level=2)


 ----创建索引的情况----
SQL> create index echo_ind on echo(object_id);


Index created.


SQL> select * from echo where object_id=1000;


Execution Plan
----------------------------------------------------------
Plan hash value: 1345159126


----------------------------------------------------------------------------------------
| Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |           |     1 |   207 |     2     (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| ECHO     |     1 |   207 |     2     (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN        | ECHO_IND |     1 |       |     1     (0)| 00:00:01 |
----------------------------------------------------------------------------------------


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


   2 - access("OBJECT_ID"=1000)  ----谓词条件影响到数据访问的路径,选择了索引,所以用access。


Note
-----
   - dynamic sampling used for this statement (level=2)

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

下一篇: oracle表访问方式
请登录后发表评论 登录
全部评论

注册时间:2013-12-28

  • 博文量
    82
  • 访问量
    651199