Oracle性能分析4:数据访问方法之全扫描

本文详细探讨了Oracle数据库中的全扫描数据访问方法,包括获取块的数量、舍弃的数据量对性能的影响,多块读取方式的原理,以及高水位线概念和如何修正。通过对不同场景的案例分析,解释了优化器选择全扫描或索引扫描的依据,并提供了降低高水位线的策略,如使用truncate、move和shrink操作。
摘要由CSDN通过智能技术生成

SQL语句执行时,Oracle的优化器会根据统计信息确定表的访问方式,一般来说,有两种基本的数据访问方式:1)全扫描。在全扫描(全表扫描或者快速全索引扫描)中,多个块被读入到一个IO运算中。2)索引扫描。索引扫描首先扫描索引叶子块以取得特定的行id(rowid),然后利用这些行id来访问父表取得实际的行数据,访问通过单块读取来完成。这里主要讲解全扫描方式,后面将介绍索引扫描。

使用全扫描

当对一个表进行全扫描时,会将表中所有数据块(block)取出并进行处理,筛选出符合条件的数据。注意Oracle必须将整个数据块(block)中的数据读到内存中,再取得符合条件的数据。因此Oracle的优化器需要关心两个信息:获取块的数量和每个块中舍弃的数据量。优化器将根据这两个信息来判断是否使用全扫描,首先我们来看看获取块的数量怎么影响优化器的选择。

获取块的数量

总的来说,如果查询需要取出表的大部分数据块,则应该采用全扫描。但由于很难评估查询将取出的表的数据块的数量,因此在使用全扫描上存在很多这样的“经验法则”:当你的查询会取出表中x%的数据行,则应该选择全扫描。这些法则有一定的道理,但是并不准确,因为当取出的数据行较大时,自然取出的数据块也会较大,这时采用全扫描并没有问题,但有时虽然取出的数据行较小,会取出的数据块也可能会较大,实际上这时也应该采用全扫描,但这些“经验法则”则不再生效。我们看看下面具体的例子。
我们创建一个表T1:

create table t1 as 
select trunc((rownum - 1) / 100) id, rownum value
  from dba_source
 where rownum <= 10000

然后为T1创建索引:

create index idx_t1_id on t1(id)

然后为T1收集统计信息:

BEGIN
  dbms_stats.gather_table_stats(user,
                                't1',
                                method_opt => 'FOR ALL COLUMNS SIZE 1',
                                cascade    => TRUE);
END;

然后我们执行查询:

select * from t1 where id = 0

该查询的执行计划如下:

SELECT STATEMENT, GOAL = ALL_ROWS
 TABLE ACCESS BY INDEX ROWID
  INDEX RANGE SCAN	

该执行计划使用了索引范围扫描,由于符合条件id为0的数据在表中只有100行数据,而整个表有1万行数据,查询出的数据只占整个数据的1%,因此我们认为这是一种合理的执行计划。
接下来我们看下面

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORACLE 健康检查与性能分析报告,内容包括: 1: 报告综述..........................................................................................................3 1.1 目的说明....................................................................................... 3 1.2 Server整体状况............................................................................. 3 2: 主机与数据库配置...............................................................................................4 2.1 主机配置.......................................................................................... 4 3: 操作系统可用性..................................................................................................5 3.1 文件系统使用状况............................................................................... 5 3.2 操作系统性能分析............................................................................... 5 4: 数据库可用性....................................................................................................7 4.1 Database Session Chart................................................................. 7 4.2 日志文件状态..................................................................................... 7 4.3 控制文件状态..................................................................................... 9 4.4 归档日志状态................................................................................... 10 4.5 表空间使用状况................................................................................ 10 4.6 数据库文件读写状况.......................................................................... 11 4.7 Invalid Objects............................................................................ 12 4.8 Disabled Triggers ........................................................................ 12 4.9 数据库备份状况................................................................................ 13 4.10 数据库恢复................................................................................... 13 5: 数据库性能分析..............................................................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值