Oracle之执行计划

1、查看执行计划

EXPLAIN PLAN FOR SELECT * FROM temp_1 a ;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

2、执行计划说明

2.1、执行顺序

根据缩进来判断,缩进最多的最先执行;(缩进相同时,最上面的最先执行)

2.2、常见表访问方式

2.2.1、TABLE ACCESS FULL(全表扫描)

Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的 Where 限制条件;
全表扫描时可以使用多块读(即一次I/O读取多块数据块)操作,提升吞吐量;
使用建议:数据量太大的表不建议使用全表扫描,除非本身需要取出的数据较多,占到表数据总量的 5% ~ 10% 或以上

2.2.2、TABLE ACCESS BY INDEX SCAN(索引扫描)
索引扫描方式说明
INDEX UNIQUE SCAN(索引唯一扫描)表中某字段存在 UNIQUE、PRIMARY KEY 约束时,Oracle常实现唯一性扫描,每次至多只返回一条记录
INDEX RANGE SCAN(索引范围扫描)在唯一索引列上使用了范围操作符(如:> < <> >= <= between);在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描);对非唯一索引列上进行的任何查询
INDEX FULL SCAN(索引全扫描)它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择
INDEX FAST FULL SCAN(索引快速扫描)与 INDEX FULL SCAN 类似,但是一个显著的区别是它不对查询出的数据进行排序
INDEX SKIP SCAN(索引跳跃扫描)表有一个复合索引,且在查询时有除了前导列(索引中第一列)外的其他列作为条件,并且优化器模式为CBO时;当Oracle发现前导列的唯一值个数很少时,会将每个唯一值都作为常规扫描的入口,在此基础上做一次查找,最后合并这些查询
2.2.3、TABLE ACCESS BY ROWID(通过ROWID的表存取)

行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID可以快速定位到目标数据上,这也是Oracle中存取单行数据最快的方法

2.3、表连接方式

表连接方式说明
SORT MERGE JOIN(排序-合并连接)表无驱动顺序;排序-合并连接适用的连接条件有” < <= = > >= “,不适用的连接条件有” <> like“
NESTED LOOPS(嵌套循环)嵌套循环的表有驱动顺序,注意选择合适的驱动表。其好处是可以先返回已经连接的行,而不必等所有的连接操作处理完才返回数据,这样可以实现快速响应
HASH JOIN(哈希连接)哈希连接只适用于等值连接(即连接条件为 = )
CARTESIAN PRODUCT(笛卡尔积)笛卡尔乘积是一个表的每一行依次与另一个表中的所有行匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值