建立了2张表 
表1:C_MP
 关键字段ID,TG_ID,大约有200万记录,并在TG_ID字段上建立索引表2:G_TG_INFO
  关键字段TG_ID,大约有12万记录,并在TG_ID字段上建立索引在如下SQL
 SELECT * FROM C_MP M ,G_TG_INFO G 
    WHERE M.TG_ID=G.TG_ID 
时没有使用上索引
在命令解释计划窗口时,发现两个表都是“TABLE ACCESS FULL”把表索引重建后,在命令解释计划窗口查看,发现两个表都是“TABLE ACCESS FULL”;
把表删掉后,表和索引都重建后,在命令解释计划窗口查看,发现两个表都是“TABLE ACCESS FULL”;
把两个表都执行
  analyze table c_mp compute statistics;
  ANALYZE TABLE c_mp COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;
  analyze table c_mp compute statistics for table for all indexes for all indexed columns;    
   analyze table G_TG_INFO compute statistics;
  ANALYZE TABLE G_TG_INFO COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;
  analyze table G_TG_INFO compute statistics for table for all indexes for all indexed columns;
后 在命令解释计划窗口查看,发现两个表都是“TABLE ACCESS FULL”;
求高手指点,我该怎么做才能是索引生效?? 索引

解决方案 »

  1.   

    你都select *没有加where条件要取出哪条记录,应该是用不到索引的吧
    再加个条件,where g.tg_id=100,就用到索引了
      

  2.   

    oracle是默认最优查询的,索引不生效,应该是因为oracle觉得没必要用索引,全表扫描就可以了,你非要索引生效,就用那个hint试试吧
      

  3.   

    oracle cbo不使用索引的情况有很多,关键看你查询列的值创建索引是否合适,及单个值所占的比例,才能确定是否要使用索引。
      

  4.   

    解决办法:1/用HINT提示;2、where 条件中加限制条件,最好是用第二个方法。
      

  5.   

    如果相信CBO优化器,就收集统计信息
    非要使用索引就加hint
      

  6.   

    确定两个表的TG_ID 字段类型是一样的么?
      

  7.   

    http://blog.csdn.net/dba_waterbin/article/details/9077483
    6种不走索引常见原因