create or replace function emp_avg_sal return number
is
  l_avg_sal number;
begin
  select avg(sal) into l_avg_sal from emp;
  return l_avg_sal;
end;
/
create index EMP_X01 on emp(sal);
create index EMP_X02 on emp(deptno);
create index EMP_X03 on emp(deptno, sal);
create index EMP_X04 on emp(deptno, ename, sal);


< ̽ 1 >
select /*+ full(emp) */ * from emp
where  sal >= emp_avg_sal ;


< ̽ 2 >
select /*+ index(emp (sal)) */ * from emp
where  sal >= emp_avg_sal;

< ̽ 3 >
select /*+ index(emp, EMP_X02) */ * from emp
where  sal >= emp_avg_sal
and    deptno = 20 ;

< ̽ 4 >
select /*+ index(emp (deptno, sal)) */ * from emp
where  sal >= emp_avg_sal
and    deptno = 20 


< ̽ 5 >
select /*+ index(emp (deptno, ename, sal)) */ * 
from   emp
where  sal >= emp_avg_sal
and    deptno = 20


< ̽ 6 >
select /*+ index(emp (deptno, sal)) */ * from emp
where  sal >= emp_avg_sal
and    deptno >= 10

