ORACLE读取数据的过程
当一个用户进程发布一个SQL语句,在解析完SQL后,这时候对应的服务器进程就需要查看SQL语句中引用的对像块在CACHE中是否已存在了,ORACLE通过查询*_SEGMENTS数据字典,来找出该段所在的文件号和SEGMENT的起始块号,可以得到一个对像在哪个文件中和拥有哪些已使用的块.找出这些信息以后,再对这些块号和文件号进行HASH,看是否能在数据库的CACHE中找到,如果找不到则直接从磁盘中读取.
在使用索引的条件下,通过索引查找,找出KEY相对应的ROWID信息,再把ROWID转换成相应的文件号和块号可以很快地返回数据,所以这就是为什么我们在有些情况下要使用索引的原因.但是在这里也要多一些额外的操作,如判断语中的谓词条件中是否有和是否能使用索引,然后要也要通*_SEGMENTS把索引SEGMENT的信息读进来,再根据这这些信息,把索引块读进来,不过一般相对来说存放INDEX的一个块能存放很多的KEY和ROWID的对应信息.所以读取INDEX的块的成本一般都很小.
阅读(2310) | 评论(1) | 转发(0) |