如果在一张表(表的记录非常大)中我要给一个字段加索引,这个字段是什么类型的比较好,索引的效率高?
谢谢:)

解决方案 »

  1.   

    int. 
    index效率最好,简单的说作为索引字段是越短越好
      

  2.   


    理论上是这样,但是OLTP系统还是不要加位图索引,并发性太差了
      

  3.   

    顶一下
        新建oracle QQ 群 
                 群号:54775466
             欢迎爱好者积极者 入群一起探讨。
      

  4.   


    是的,支持这种说法。并且索引并非随便加,你要用来干什么?根据实际业务而定,而不是根据技术决定的,如你要提取一个表的整体数据,那索引对你几乎没有意义,普通索引只能帮助你在大量数据中寻找少量数据较为快速,而并非绝对,对于索引段的管理需要系统格外的开销,有些开销比表的维护还要大,因为他的物理存储方式和表几乎一样,都是将索引字段存储到块内部的,遍历到指定的ROWID,若只需要索引字段直接返回结果,若需要其它字段根据ROWID回表提取数据返回。所有索引寻找都给予平衡二叉树,至于唯一性索引是基于该树只能寻找到一个ROWID而已,往往走INDEX UNION SCAN,范围查询是,需要定位多行数据,若多行数据的ROWID在同一个索引块内部是最好的,不用跨块提取ROWID,如果相邻的范围查询,由于所以对所以指向的字段进行排序,所以提取的也是相邻节点的ROWID,其与唯一性索引的区别在这里,提取的方式往往是INDEX RANGE SCAN,而若你查询的结点分布比较分散(如ID IN(1,110000,200000),这样的数据是很分散的,另外大量的数据进行返回时),索引节点导致多次从根节点重新搜索,那么结果一般会导致INDEX FULL SCAN,此时存在和TABLE FULL SCAN的竞争,一般不需要回表查询,ORACLE才会选择INDEX FULL SCAN,因为这样的情况下,两者的效率不一定谁比谁快;另外是INDEX FAST FULL SCAN,一般是在统计的时候使用,如SELECT COUNT(*) FROM TABLE_NAME;或者在两个表通过索引字段关联过程中,若只返回索引值(无回表),带有非唯一性索引的那个表会采用这种索引方式,在OLTP系统中我们不推荐使用位图索引,他在高并发时应用中容易出问题,但位图索引可以在OLAP系统中的统计角度解决部分问题。而Index Skip一般是联合索引中采用联合索引非主字段取查询数据,而是直接通过辅助字段取查询采用的索引方式,该索引方式的效率也蛮低的;最后所谓函数索引,也可以对某表部分数据进行索引,并不是和数据类型有什么关系,容易误解的是某些数据类型经常容易被加函数来对比,如:日期类型字段,很多参数在传入是字符串,很多人习惯写法是:
    TO_CHAR(日期字段,'YYYY-MM-DD HH24:MI:SS')=传入参数
    这样当然不会走索引,我们的写法是:
    日期字段=TO_DATE(传入参数,'YYYY-MM-DD HH24:MI:SS')
    走不走索引,你自己试一试就知道了,自己使用PL/SQL分析器或者可以将SQL执行计划和分析过程导出查看,或者在COMMONDE中使用:
    SET AUTOTRACE TRACEONLY;命令后再执行SQL,此时就是输出SQL的执行计划;
    我们查询过程一般情况下没有必要将数据库字段转换后再对比的,不想让数据库字段加一个函数再做对比,而是将参数加函数,那样就和函数索引没有关系了,也会走索引了,但是有些时候我们逼于无奈,要通过转换后去和某些值做对比,此时,而且需要经常使用部分数据,此时就要用到函数索引了。