Oracle执行计划里的 access和filter有什么区别

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

在查看执行计划的信息中,经常会看到两个谓词filter和access

,它们的区别是什么,理解了这个两个词对我们解读Oracle的执行计划信息会有所帮助。

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

二、举例说明:
----创建一张表echo----
 1 SQL> create table echo as select * from dba_objects;
 2
 3 Table created.
 4
 5 SQL> set autotrace trace exp;
 6 SQL> set linesize 150;
 7 SQL> select * from echo where object_id=1000;
 8
 9 Execution Plan
10 ----------------------------------------------------------
11 Plan hash value: 642657756
12
13 --------------------------------------------------------------------------
14 | Id  | Operation      | Name | Rows  | Bytes | Cost (%CPU)| Time     |
15 --------------------------------------------------------------------------
16 |   0 | SELECT STATEMENT  |     |    12 |  2484 |   289   (1)| 00:00:04 |
17 |*  1 |  TABLE ACCESS FULL| ECHO |    12 |  2484 |   289   (1)| 00:00:04 |
18 --------------------------------------------------------------------------
19
20 Predicate Information (identified by operation id):
21 ---------------------------------------------------
22
23    1 - filter("OBJECT_ID"=1000)  ----因为表echo没有创建索引,执行计划没有选择数据访问路径的余地,谓词条件在这里只是起到数据过滤的作用,所以使用了filter。
24
25 Note
26 -----
27    - dynamic sampling used for this statement (level=2)
28
 ----创建索引的情况----
29 SQL> create index echo_ind on echo(object_id);
30
31 Index created.
32
33 SQL> select * from echo where object_id=1000;
34
35 Execution Plan
36 ----------------------------------------------------------
37 Plan hash value: 1345159126
38
39 ----------------------------------------------------------------------------------------
40 | Id  | Operation            | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
41 ----------------------------------------------------------------------------------------
42 |   0 | SELECT STATEMENT        |           |     1 |   207 |     2     (0)| 00:00:01 |
43 |   1 |  TABLE ACCESS BY INDEX ROWID| ECHO     |     1 |   207 |     2     (0)| 00:00:01 |
44 |*  2 |   INDEX RANGE SCAN        | ECHO_IND |     1 |       |     1     (0)| 00:00:01 |
45 ----------------------------------------------------------------------------------------
46
47 Predicate Information (identified by operation id):
48 ---------------------------------------------------
49
50    2 - access("OBJECT_ID"=1000)  ----谓词条件影响到数据访问的路径,选择了索引,所以用access。
51
52 Note
53 -----
54    - dynamic sampling used for this statement (level=2)
时间: 2024-12-28 20:42:50

Oracle执行计划里的 access和filter有什么区别的相关文章

如何看懂ORACLE执行计划

如何看懂Oracle执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when a query is executed within Oracle. 二.如何访问数据 At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle bloc

Oracle 执行计划(Explain Plan)

执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 看懂执行计划也就成了SQL优化的先决条件. 通过执行计划定位性能问题,定位后就通过建立索引.修改sql等解决问题. 一.执行计划的查看 1.1 设置autotrace autotrace命令如下 序号 命令 解释 1 SET AUTOTRACE OFF 此为默认值,即关闭A

Oracle执行计划

Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 因为我一直用的PLSQL远程连接的公司数据库,所以这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ->  首选项 ->   窗口类型  ->  计划窗口  ->  根据需要配置要显示在执行计划中的列

Oracle 执行计划中的buffer sort

Oracle 执行计划中的buffer sort实际上没有排序,只是把数据加载到内存,不扫描多次表. --制造数据 drop table test purge; drop table test1 purge; create table test as select * from dba_objects where rownum<10; create table test1 as select * from dba_objects where rownum<10; create index in

[转]看懂Oracle执行计划

原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 因为我一直用的PLSQL远程连接的公司数据库,所以这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ->  首选项 ->   窗口类型  ->  计划窗口  ->  根据需要配置要显示在执行计划中的列 执行计划的常用列字段解释:

Oracle执行计划详解

 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1) 全表扫描(Full Table Scan

Oracle执行计划突变诊断之统计信息收集问题

Oracle执行计划突变诊断之统计信息收集问题 1.  情形描述 DB version:11.2.0.4 WITH SQL1 AS  (SELECT LAC,          CI,          TO_NUMBER(C.LONGITUDE) LONGITUDE,          TO_NUMBER(C.LATITUDE) LATITUDE     FROM MB_SYS_CELL_INFO C    WHERE C.CONTY_NAME = '道孚县'), SQL2 AS  (SELE

闲谈Oracle执行计划的步骤顺序

经过长时间学习Oracle,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西.Oracle执行计划的每一步返回一组行,它们或者为下一步所使用,或者在最后一步时返回给发出SQL语句的用户或应用.由每一步返回的一组行叫做行源(row source).下面得树状图显示了从一步到另一步行数据的流动情况.每步的编号反映了在你观察Oracle执行计划时所示步骤的顺序(如何观察Oracle执行计划将被简短地说明).一般来说这并不是每一步被执行的先后顺序. Oracle执行计划的每一步或者

Oracle执行计划总结

一.ORACLE中常见执行计划 表访问的执行计划 1.table access full:全表扫描.它会访问表中的每一条记录. 2.table access by user rowid:输入源rowid来自于用户指定. 3.table access by index rowid:输入源rowid来自于索引. 4.table access by global index rowid:全局索引获取rowid,然后再回表. 5.table access by local index rowid:分区索