DB2数据库查询过程(Query Processing)----表扫描与I/O(Table Scan and I/O)

表扫描开销

在《DB2数据库查询过程(Query Processing)----概述》一文中已经介绍过,表扫描是数据访问方式中最简单,最低效的一种。在所有的关系型数据库中都会有这种数据访问方式,不同系统中叫法可能不同(如direct search 、 data scan 、 tables scan),由于存在不同的表共用同一个Extent的情况,有时候人们认为将这种扫描方式称为表空间扫描(Tablespace Scan)更为确切。

表扫描准确的说叫全表扫描,顾名思义,是指通过扫描表中的所有行来找到查询语句中满足where子句查询条件的行的访问方式。采用表扫描进行的查询无论是否已经查找到满足条件的行都必须扫描到表中的全部行(因为不能判断剩下的行中是否有满足条件的),可想而知,对于大量数据而言,查询开销是非常可观的。

考虑这样一种情况:

EMPLOYEE表中含200000行数据;

每行数据的长度为200 字节(Byte);

表所在的表空间采用4KB数据页(去掉数据页头部,认为4KB数据页总可用空间为4000B),且数据页PCTFREE参数设定为30%(即每个数据页实际可用空间为4KB*(1-70%)=2800B)。

如此,一个数据页能存储的表行数为2800B/200B=14行,存储EMPLOYEE表中的全部行需要200000/14=14286页。


现在要查询EMPLOYEE中编号为123456的员工的姓名,SQL语句如下:

Select name From EMPLOYEE Where id=123456;

如果使用表扫描方式查找,就必须要将14286个数据页全部读入缓冲池,即进行14286次I/O操作。假设这些I/O操作都是随机I/O,按照一次I/O操作的经验开销为1/80秒计算,完成上面的SQL查询所花费的I/O时间 Cost(I/O)=14286*1/80=178.6秒,仅20万行的表查询花费近3分钟(CPU开销在这样的I/O开销面前可以忽略不计了)!这几乎是不可接受的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值