我在一张目前存储了50多万条数据的表,
应该该表经常要做查询,然后我在该表上对该表的d_date字段建了个索引可是今天发现在执行 select * from 该表 where d_date = '2010-12-31'
语句的执行计划的时候,显示得始终是 "TABLE ACCESS FULL",索引始终没有生效,
查询时间较长啊 .然后我用alter 语句 rebuild下该索引,还是没有生效...最终很郁闷.但是加上强制执行索引的条件索引才生效(select /*+omdex(t,IDX_DDATE)*/) * FROM 该表 where t.d_date = '2010-12-31')请求解决办法啊.

解决方案 »

  1.   


    1,同楼上
    2:是不是走索引更慢,ORACLE的索引之前能走》?做了什么改变导致执行变化改变了?
      

  2.   

    不要认为走索引就快,d_date列索引的选择性如何?
    加HINT强制走索引,查询快了吗?
    把执行计划贴出来看看。无计划、无真相。
      

  3.   

    d_date是什么字段类型啊
    把加HINT前后的执行计划贴一下吧,谢谢
      

  4.   

    1、你说 查询时间较长啊 是多长?2、这个表是否操作频繁3、这个表是否建立时间很久如果很频繁,建立时间很久
    建议你做一下表分析analyze table xxxxx  estimate statistics;--抽样分析,比较快,推荐analyze table xxxxx  compute   statistics; --完成分析,比较慢,4、建议你贴出执行计划!
    5、说明你建立的索引是什么索引,是否出现隐式转换
      

  5.   

    是否使用索引,很大程度上由你的 sql 语句的 selectivity 来决定的。如果从 50 万条数据中 select 10 万条数据,当然不会使用索引。
      

  6.   

    drop index 索引;
    analyze table 表名 compute statistics;
    ANALYZE TABLE 表名 COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;
    analyze table 表名 compute statistics for table for all indexes for all indexed columns;
    create index 索引 on 表名(字段);
      

  7.   

    学习了 使用强制索引
    应该是select /*+index(a,index_name)*/ column_name from table where condition 吧
    是不是你的强制索引写法有问题啊??