ORACLE index提示

index提示被用子显式地指定表名,在这种情况下,优化器将使用表中最佳的索引;或者显式地指定表名和索引名,在这种情况下,优化器将使用指定的索引。

调用index提示时要遵循以下原则:

[@more@]

1 如果表名或索引名拼写错误那么查询将不使用提示,下面是一个表名拼写错误的查询:

select /*+ index(erp,dept_idx) */ * from emp;

2 表名在提示中必须指定。例如,下面的提示将会由子在查询中没有指定表名而被忽略:
select /*+ index(dept_idx) */ * from emp;

3 如果在查询中指定了表别名,那么必须使用表别名。例如,下面的查询将忽略index提示,因为没有使用emp表的别名"e"

select /*+ index(emp,dept_idx) */ * from emp e;

4 索引名称是可选的,如果没有指定,优化器将指定表中“最佳的”索引,但是在永久调整时,并不推荐使用这种方法。下面的查询要求优化器使用amp表的最佳索引:

select /*+ index(e) */ * from emp e;

index提示:
1 index_join提示: 指定使用的索引
2 and_squal提示: 需要指定目标表名和至少2个index名,但index名不超过5个
select /*+ and_equal(emp,job_idx,mgr_idx) */ ename
from emp
wehre job = 'SALESMAN'
and mgr = '7698'
效果: 先分别扫描索引job_jdx, mgr_idx,然后返回结果合并。

3 index_asc提示
4 index_descselect /*+ index_desc(emp,sal_idx) */
ename, max(salary)
from emp;
5 no_index
6 index_combine
提示要求优化器对两个位图执行ROWID交集操作
create bitmap index dept_bit on emp(deptno);
create bitmap index job_bit on emp(job);

select /*+ index_combine(emp,dept_bit,job_bit) */ ename,job,deptno
from emp
wehre job = 'SALESMAN'
and deptno = 30;

7 index_ffs
create index dept_job_idx on emp(deptno,job);
select /*+ index_ffs(emp,dept_job_idx) */ename,job,deptno
from emp
where job = 'SALESMAN';

8 use_concat 提示为查询中所有OR条件使用UNION ALL执行计划,并将查询重新书写为多个查询。如果在SQL中查询的where中有大量OR条件,那么通常使用use_concat
select /*+ use_concat */ ename
from emp
where deptno = 10
and sal < 5000
and job = 'CLERK'
9 parallel 提示

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

转载于:http://blog.itpub.net/640706/viewspace-1045423/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值