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/