* Oracle执行计划——表连接方式&oracle访问数据方式

1. 全表扫描:指oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位线(HWM, High Water Mark),这段范围内所有的数据块oracle都必须读到(高水位线会随分配给表的现有空间不足而向上移动;但delete后高水位线不会随之向下移动,就算delete所有数据,高水位线还是在原来的位置)

2. Rowid扫描:指oracle在访问目标表里的数据时,直接同故宫数据所在的ROWID去定位并访问这些数据。Oracle中存取单行数据最快的方法:TABLE ACCESS BY ROWID(通过ROWID的表存取)

3. 同等条件下,当目标索引的索引行的数量大于1时,索引范围扫描所耗费的逻辑读至少会比相应的索引唯一性扫描的逻辑读多1

4. Index skip scan仅适用于目标索引前导列的distinct值数量较少、后续非前导列的可选择性又非常好的情形,因为索引跳跃式扫描的执行效率一定会随着目标索引前导列的distinct值数量的递增而递减

5. 嵌套循环相对于其他连接方法的优点:可以实现快速响应。即它可以第一时间先返回已经连接过且满足连接条件的记录,而不必等待所有的连接操作全部完成才返回连接结果

6. 哈希连接很适合于小表和大表之间做表连接且连接结果集的记录数较多的情形,特别是在小表的连接列的可选择性非常好的情况下,这时候哈希连接的执行时间就可以近似看作是何全表扫描那个大表所耗费的时间相当;当两个表做哈希连接时,如果在施加了目标SQL中指定的谓词条件(如果有的话)后得到的数据量较小的那个结果集所对应的Hash Table能够完全被容纳在内存中(PGA的工作区),则此时的哈希连接的执行效率会非常高

7.反连接:NOT IN 和<>ALL对空值敏感,这意味着NOT IN后面的子查询或者常量集合一旦有NULL值出现,则整个SQL的执行结果就会为NULL即执行结果部包含任何记录;NOT EXISTS对NULL值部敏感,这意味着NULL值对NOT EXISTS的执行结果不会有什么影响

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值