Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2802839
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2010-12-11 01:52:59

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

上一篇:快速导入数据

下一篇:FLM来管理的EXTENT

给主人留下些什么吧!~~

chinaunix网友2010-12-13 15:28:52

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com