我有一个TABLE  T1,里面有两列 C1,C2。
其中C1为主健,C2为普通索引。
T2中大概有100W条记录,C2大部分数据都是重复的(99.9W都是重复的)。
我现在要通过语句  select * from t1 where c2='ABC'
这条语句执行速度有点慢,分析了一下,根本没有走索引。
是不是跟数据大量重复有关系?要如何才能解决

解决方案 »

  1.   

    select count(*)from t1 where c2='ABC'
    看一下有多少记录?
      

  2.   

    只会有<=1条记录
    但是C2列中大部分都是‘N/A’,只有小部分有数据
      

  3.   

    那这样的话普通的索引可能的不好的用位图索引试试
    create bitmap index idx_bitmap_t1 on t1(c2);
      

  4.   

    select * from t1 where c2 || ''='ABC',这样写,屏蔽掉索引
      

  5.   

    分析下表和索引,然后查询时候用提示hint去做试试呢
      

  6.   


    我用 select /*+index(t1_index_c2)*/* from t1 where c2='ABC'
    分析,还是没有走索引
    跟不建任何索引一样的时间,都是一秒多
      

  7.   

    CBO会根据统计信息判断是否需要使用索引,只有选择性好的情况下使用索引才是高效的,因为索引是单块读取,全扫是多块读取,取得结果多的情况下,多块比单块效率高。
      

  8.   

    cardinality会导致不走index,而进行fts