为什么下述语句我的索引用不上?SELECT a.C_DPT_CDE, 
       b.C_PLY_NO 
FROM t_sap_skdat_hist a, t_fin_plyedr_coldue b
WHERE a.C_FROM_KEY = b.c_rcpt_no其中我在表t_sap_skdat_hist表中对字段c_from_key建立了一个不唯一索引,在表t_fin_plyedr_coldue 表对字段c_rcpt_no建立了一个不唯一索引。可是在查询的时候它还是对上述两个表进行全表扫描,上述两个索引都是建的单列索引.
  再还有我想问问复合索引和单列索引能不能进行关联,如果关联是不是索引失效!
  请各位高手解答! 

解决方案 »

  1.   

    如果说两个表都进行了全表扫描可能性不太大
    执行show parameter optimizer看看参数的设置
    加入hint可以提示sql采用索引,例如:
    SELECT /*+index(index_name1,index_name2)*/a.C_DPT_CDE, 
           b.C_PLY_NO 
    FROM t_sap_skdat_hist a, t_fin_plyedr_coldue b
    WHERE a.C_FROM_KEY = b.c_rcpt_no
    索引列可以进行关联,一般情况下不会使索引失效
    在8及以下版本使用复合索引时需从符合索引的第一列开始使用,如果直接使用后面的列,索引不会生效,9中对索引加入了自动跳转功能,不受这个限制
      

  2.   

    你的意思是不是加上那两个索引,可是加上那两个索引还是会有问题,它还是不使用索引,请问如何加入hint来提示sql语句采用索引.
      

  3.   

    上述两个表的数据都已经上了百万条记录了。要不然我也不会管我的sql语句会不会用索引了。
      

  4.   

    你这条语句的查许记录会有多少条啊?如果结果集大于表的“80%”的记录数,oracle就不采用索引查询了!