ITPub博客

首页 > 数据库 > Oracle > ORACLE index提示

ORACLE index提示

原创 Oracle 作者:liang573728 时间:2019-06-03 15:00:06 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/640706/viewspace-1045423/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2005-10-15

  • 博文量
    152
  • 访问量
    138348