Oracle执行的IO问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 20:46:38
关于执行计划IO的问题

我今天自己创建了一个表T1,顺序插入数据,能够保证数据在主键ID(递增)聚簇.
ID从1~32

数据块使用如下:
Free Blocks.............................4
Total Blocks............................24
Total Bytes.............................196608
Unused Blocks...........................3
Unused Bytes............................24576
Last Used Ext FileId....................1
Last Used Ext BlockId...................56673
Last Used Block.........................5

使用了17个块,每个块62行(第一块63,为什么?) 第17块未满只有31行

现在用最简单的全表扫描 select * from t1

执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS Cost=6 Cardinality=1025 Bytes=113775 IO cost=6
TABLE ACCESS FULL Cost=6 Cardinality=1025 Bytes=113775 IO cost=6

我的问题是为什么IO是6呢? 难道不是访问一个块就是一个IO吗?(21个IO,已经高水位21块了).
Cardinality行数是对的,说明统计信息没错.

1、第一块存放63行,是因为你的个别记录占用空间较少,可能是因为其中的VARCHAR2类型字段实际占用存储较少。每个数据块的存储记录数实际并不完全相等的
2、IO 并不是指数据块,而是跟磁盘有关。