日期:2014-05-16  浏览次数:21442 次

oracle 建立的索引未生效
我在一张目前存储了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')

请求解决办法啊.




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

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


探讨
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 column……