C、语句级别
这些需要用到Hint,比如: 
SQL> SELECT /*+ RULE */ a.userid, 
2 b.name, 
3 b.depart_name 
4 FROM tf_f_yhda a, 
5 tf_f_depart b 
6 WHERE a.userid=b.userid;
		
				4、为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢 ?
		
		A、不走索引大体有以下几个原因 
♀你在Instance级别所用的是all_rows的方式 
♀你的表的统计信息(最可能的原因) 
♀你的表很小,上文提到过的,Oracle的优化器认为不值得走索引。 
		B、解决方法
♀可以修改init<SID>.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用4中所提的Hint. 
♀删除统计信息 
SQL>analyze table table_name delete statistics; 
♀表小不走索引是对的,不用调的。
		
				5、其它相关
		
		A、如何看一个表或索引是否是统计信息 
		SQL>SELECT * FROM user_tables 
2 WHERE table_name=<table_name> 
3 AND num_rows is not null;
SQL>SELECT * FROM user_indexes 
2 WHERE table_name=<table_name> 
3 AND num_rows is not null;
		b、如果我们先用CBO的方式,我们应及时去更新表和索引的统计信息,以免生形不切合实的执行计划。 
SQL> ANALYZE TABLE table_name COMPUTE STATISTICS; 
SQL> ANALYZE INDEX index_name ESTIMATE STATISTICS;
		具体的ANALYZE语句请参照Oracle8i/9i 的refrence文档。
<================end of file“Oracle的优化器(Optimizer)”=====================>
		
				
下面的是我的关于一点执行计划的理解:
		1。首先要启动trace的选项:
set autotrace trace eXPlain
如果出现下面的错误:
		SQL>  set autotrace trace explain
SP2-0613: Unable to verify PLAN_TABLE format or existence
SP2-0611: Error enabling EXPLAIN report
那么要先运行下面的语句:
 @?/rdbms/admin/utlxplan.sql;
		2。分析下面的执行计划:
		SQL> select ename,dname    from emp, dept   where emp.deptno=dept.deptno     and dept.dname in ('ACCOUNTING','RESEARCH','SALES','OPERATIONS');
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   NESTED LOOPS
   2    1     TABLE Access (FULL) OF 'EMP'
   3    1     TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'
   4    3       INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
关于前面的两个数字,第一个是状态ID,第二个是父ID。
就是如下所示:0-->1-->2
                         
                         -->3-->4
在上图里,0的执行依靠1,1的执行又依赖2和3,2是没有子ID的,所以2最先执行,然后是4,在然后是3;然后2和3的结果传回1。
在这个里面0行有个字“Optimizer=CHOOSE”,这个就是上文说的那个oracle的优化器了。
还有,看这个“ INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)”,就知道这个语句运行的时候是走INDEX的。