- 论坛徽章:
- 0
|
emp表上deptno列有索引,而且deptno = 10条件能查询出表中大部分的数据如(50%)。如该表共有4000万行数据,共放在有500000个数据块中,每个数据块为8k,则该表共有约4G,则这么多的数据不可能全放在内存中,绝大多数需要放在硬盘上。db_file_multiblock_read_count参数的值200。如果采用全表扫描,则需要500000/db_file_multiblock_read_count=500000/200=2500次I/O。如果采用索引扫描,假设deptno列上的索引都已经cache到内存中,所以可以将访问索引的开销忽略不计。因为要读出4000万x 50% = 2000万数据,假设在读这2000万数据时,有99.9%的命中率,则还是需要20000次I/O。
我觉得内存中的索引是将4000万条记录的deptno列值和这4000万条记录的rowid存在了内存中,在扫描索引的时候会有2000万个rowid被找到,每个rowid都在一个数据块中,所以i/o次数应该是 2000万/200=10万
而这里最后得到的20000次i/o是怎么计算的?用索引读取数据是不是我想的这个过程呢? 多谢 |
|