局部范围扫描的灵活应用

局部范围扫描的概念:摘自《海量数据库的解决方案》

能够实现局部范围扫描方式的SQL具有一个非常显著的特征,就是不论处理的数据量有多大,始终都能够确保具有较快的执行速度。也许这句具有魅力的话有些不符合常理,但是对于我们而言,这难道不是我们所追求的目标吗?

在实现了局部范围扫描的瞬间,SQL开始从大量的限制中获得了自由,但是很明显在变形之前的SQL中有可能会存在着一些不符合局部范围扫描准则的要素,之所以实现了局部范围扫描,是因为我们对SQL做了适当变形并使其遵循了局部范围扫描的准则。

无法使用局部扫描的情况:

Group 聚合函数,如sum,avg,count,min,max等。

Order by

Sort

Union

Minux

一、用读取路径实现对排序的替代操作。

  test01索引建在object_nameobject_id上。

  整体范围扫描:

  select t.owner,t.object_name,t.object_type

  from test01 t

 where t.object_type like 'TABLE%'

 order by t.object_name

 

局部范围扫描

select /*+ index_desc(t IDX_OBJECTNAME)*/t.owner,t.object_name,t.object_type  --表有别名的必须使用别名,否则hint不会生效的。

  from test01 t

 where t.object_type like 'TABLE%'

 

二、maxmin的局部扫描:

全局扫描:

select max(object_id) from test01 where object_type = 'TABLE';

   and t.object_name > ' ';--用该条件才能使用hint提示生效。

 

局部扫描:

select /*+ index_desc(test01 IDX_OBJECTID)*/

 object_id

  from test01

 where object_type = 'TABLE'

   and object_id > 0  --用该条件才能使用hint提示生效。

   and rownum = 1;

三、FILTER型局部范围扫描:

select count(*) into cnt from test01 t where t.object_id > 100;

-----------

if cnt > 0

-------------------

如果只是确认存在与否,没必要对全部数据进行count

 

 

select 1 into cnt from dual

where exists(

  select 'X' from test01 t where t.object_id > 100

)

if cnt > 0

只要满足条件就立即返回。

 
待续,,,,,,

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

转载于:http://blog.itpub.net/20577218/viewspace-701401/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值