Oracle中CBO的访问路径

访问路径(Access Paths)是数据库访问数据的方法,Oracle中主要包括了Full Table Scans,Rowid Scans,Index Scans,Cluster Scans,Hash Scans,Sample table scans,这里介绍一下各种访问路径的具体实现,Index Scans由于在另外一篇里已经写了,这里就不再重复,只是正对表的访问路径做一下说明。

1.Full table scans全表扫描,就是会把表中每一行都会取出来进行筛选,被认为是效率地下的一种方式,但是如果你是访问大量的数据,全表扫描往往效率更高。全表扫描是从段的开始读到结尾,而且采用多块读的方式,其中参数db_file_multiblock_read_count就是控制每次读几个数据块的。而且全表扫描只是扫描高水位线一下的块。在遇到一下情况时CBO会使用全表扫描:

1)表上缺乏索引

2)访问大量数据,如果优化器认为你的查询会访问表的绝大部分块,就会采用全表扫描,就算有索引也不会使用。

3)小表的访问 如果一个小表的数据块总数还不到db_file_multiblock_read_count个,那么全表扫描会更有效率。

4)使用FULL提示,告诉优化器使用全表扫描

2.Rowid Scan 这个扫描一般是查询的第二个步骤,因为第一个步骤是去索引上找到数据行对应的rowid,然后直接通过rowid直接去访问数据。

3。Cluster Scans.当从一个索引集群表里查询数据时,会使用该访问方法,索引集群表是把具有相同索引键值的行都放在同一个数据块里,Cluster Scans首先通过扫描集群索引得到所选行的rowid,然后通过rowid直接定位数据行。使用索引集群表可以减少I/O,提交join的效率等有点。

4.Hash Scans当从一个散列集群表里查询数据时,会使用该访问方法。散列集群表是把具有相同散列值的行放在同一个数据块里,这样可以提高数据访问效率。

5.Sample Table Scan。就是使用采样方式访问数据的时候,如select * from employees sample block(1),这个语句是指随机访问employees表1%的数据

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/165278/viewspace-442559/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/165278/viewspace-442559/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值