在PL/SQL中 执行explain plain for select ...算法
查看Description 数据参考:数据库
Oracle 常见的执行计划步骤缓存
这里咱们介绍一些常见的执行计划中的步骤及算法。函数
1、表访问路径spa
(1)TABLE ACCESS 排序
FULL:全表扫描。它会访问表中的每一条记录(读取高水位线之内的每个数据块)。索引
CLUSTER:经过索引簇的键来访问表。ip
BY INDEX ROWID:经过指定ROWID来访问表中的单条记录。ROWID是访问记录的最快方式,一般由索引访问获得。io
BY USER ROWID:提供一个绑定变量、字面变量或WHERE CURRENT OF CURSOR子句来经过ROWID进行访问。变量
BY GLOBAL INDEX ROWID:经过由全局分区索引来得到ROWID,而后进行表访问。该访问出如今分区表中。
BY LOCAL INDEX ROWID:经过由局部分区索引得到ROWID,而后进行表访问。该访问出如今分区表中。
(2)EXTERNAL TABLE ACCESS:访问外部表。
(3)RESULT CACHE:这个SQL结果集可能来自结果集缓存。
(4)MAT_VIEW REWRITE ACCESS:SQL被重写以利用物化视图。
2、索引操做
(1)AND-EQUAL:合并来自一个或多个索引的结果集。
(2)INDEX
UNIQUE SCAN:只返回一条记录的地址(ROWID)的索引扫描。
RANGE SCAN:返回多条记录的ROWID的索引检索。通常出现这样的访问,是由于出现了区间操做符。
FULL SCAN:按照索引键的顺序扫描整个索引。
SKIP SCAN:组合索引键中非前导列索引检索。
FULL SCAN(MAX/MIN):检索索引中的最高或最低的索引条目。
FAST FULL SCAN:按照块顺序扫描每个索引的条目,可能会使用多块读取。
(3)DOMAIN INDEX:应用域索引。
3、位图索引操做
(1)BITMAP
CONVERSION:将位转换为ROWID或相反。
INDEX:从位图中撮一个值或一个范围的值。
MERGE:合并位图。
MINUS:从一个位图减去另外一个位图。
OR:对两个位图进行OR操做。
4、表链接操做
(1)CONNECT BY:对前一个步骤的输出结果执行一个层次化的自链接操做。
(2)MERGE JOIN:对前一个步骤的输出结果执行一个合并链接。
(3)NESTED LOOP:对前一个步骤执行嵌套循环链接。对上一层结果集的每一行,都会扫描下一层结果集以找到匹配记录。
(4)HASH JOIN:对两个记录进行散列链接。
(5)任意链接操做
OUTER:外链接
ANTI:反链接
SEMI:反链接
CARTESIAN:一个结果集中的每一条记录都与另外一个结果集中的每一条记录进行链接。
5、集合操做
CONCATENATION:与显式指定一个UNION子句同样,多个结果集被按照一样的方式作合并。它一般发生在对索引列使用OR 运算时。
INTERSECTION:对两个结果进行比较,只返回两个结果集中都存在的记录。
MINUS:除了在第二个结果集中出现的记录外,返回第一个结果集中的全部记录。
UNION-ALL:对两个结果集进行合并,并返回两个结果集中的全部记录。
UNION:与UNION-ALL相同,可是它不返回重复记录。
VIEW:访问一个视图定义或或建立一个临时表用于存放结果集。
6、分区操做
(1)PARTITION
SINGLE:访问单个分区。
ITERATOR:访问多个分区。
ALL:访问全部分区。
INLIST:基于IN列表中的值来访问分区。
7、汇总操做
(1)COUNT:使用COUNT函数进计算。
STOPKEY:计算结果中的记录,当达到必定数量时,就中止计算。这一般发生在使用了WHERE子句且指定了ROWNUM, 如:WHERE ROWNUM <= 10。
(2)BUFFER SORT:对临时结果集作一次内在排序。
(3)HASH GROUP BY:使用散列进行分组操做。
(4)INLIST ITERATOR:对IN中的每个值都实现一次子操做。
(5)SORT
GROUP BY:为了知足GROUP BY而对结果集进行排序。
AGGREGATE:当在已分组好的数据上使用分组函数时,会出现此操做。
JOIN:了进行合并链接而对记录进行排序。
UNIQUE:排除重复记录的排序操做,一般是使用DISTINCT子句。
GROUP BY:为知足GROUP BY子句,对结果集进行排序分组。
8、其余操做
(1)FOR UPDATE:使用了FOR UPDATE子句。
(2)COLLECTION ITERATOR:使用了表函数提取记录。
(3)FAST DUAL:访问DUAL表。
(4)FILTER:从结果集中排除掉不匹配选取条件的记录。
(5)REMOTE:经过数据库链接,访问一个外部的数据库。
(6)FIRST ROW:获取查询的第一条记录。
(7)SEQUENCE:使用了Oracle序列。
(8)LOAD AS SELECT:使用SELECT进行直接路径的INSERT操做。
(9)FIXED TABLE:访问固定的(X$/V$)表。
(10)FIXED INDEX:访问固定的索引。
(11)WINDOW BUFFER:支持分析函数的内部操做。