oracle full table scan,ORACLE优化之施行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN

ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN

ORACLE优化之执行规划(1) - TABLE FULL SCAN/INDEX FULL SCAN

TABLE FULL SCAN

全表扫描,表示表中所有记录都被访问到。如果表很大,

该操作对查询性能的影响会很大,此时,建议使用索引

或去掉查询中的LIKE操作。

EXPLAIN PLAN

SET statement_id = 'ex_plan1' FOR

SELECT phone_number FROM employees

WHERE phone_number LIKE '650%';

INDEX RANGE SCAN [DESCENDING]

从相关索引中获取了一个或多个ROWID。

当查询条件字段具有非唯一索引,或者查询过滤条件是一个范围,

ORACLE将会采用该操作。

示例:

SELECT * FROM t_employee WHERE id > 11001;

SELECT * FROM t_employee WHERE first_name = 'Tommy';

此例中,id是关键字,first_name具有非唯一索引。

oracle会对此两个索引采用INDEX RANGE SCAN.

INDEX FULL SCAN [DESCENDING]

从相关的索引中获取了所有的ROWID。由于是按索引的顺序访问和获取ROWID,

因此获得的ROWID是直接排过序的。

示例1:

SELECT /*+ INDEX(T_EMPLOYEE IDX_NODES_ID)*/ id from T_EMPLOYEE;

示例中使用了HINT要求强制使用索引查询,但未指定索引字段的过滤条件,

于是ORACLE将采用INDEX FULL SCAN操作。由于该操作按索引顺序或去记录,

因而返回的ID列表是排过序的。

示例2:

SELECT * FROM T_EMPLOYEE WHERE MIDDLE_NAME IS NULL;

当MIDDLE_NAME字段可以为NULL,且具有非唯一索引,ORACLE在执行此语句时,

可能会采用INDEX FULL SCAN操作。

但在某些情况下,比如该语句已经执行过一遍,相关数据已经加载到内存,

那么,ORACLE的执行规划也可能会直接选择TABLE FULL SCAN操作,可能

是ORACLE认为此时直接TABLE FULL SCAN的性能会比INDEX FULL SCAN高。

INDEX FAST FULL SCAN

从相关索引中获取所有的ROWID。该操作同时从多个索引数据块中扫描数据,

所以结果并不是排序的。用于对索引字段进行查询。

示例:SELECT id FROM T_EMPLOYEE;  其中id为表的主键索引字段。

优化策略:

一般情况下,尽量避免FULL SCAN,特别是TABLE FULL SCAN和INDEX FULL SCAN.

在查询大表的情况下,INDEX RANGE SCAN会显著提高查询性能。但在查询小表时,

INDEX可能反而对性能产生不利影响。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值