现在工作第一次面对百万级以上数据量的、100朝上个字段的表,因为是第一次写存储过程,碰到select这些表的语句特别多,在不建索引的时候再对这些表做查询的时候特慢,所以我建了好几个索引,但是都说不能太多,想请问多少个不会带来维护上的压力还有我建立的许多索引经常不生效,许多网友回答说可能是 数据隐式转换,请问数据隐式转换和索引有什么关系还有如何在合适的情况去用函数索引,什么情况下用?

解决方案 »

  1.   

    索引怎么建还得看你日常的SQL怎样写,经常拿什么样的条件做为检索数据的where条件。
    只有充分分析这些你才能建立合适的索引...
    你光说百w级数据别人是帮不了你的,而且百万也挺少的撒。
      

  2.   

    索引多不多  都看具体需求
    但是 如果表设计的合理,不会需要非常多的索引,毕竟能从ID找到人 就不会需要从名字找到人(用逻辑去优化这块)隐式转换是说 你在某个索引列上进行了运算、转换等,造成sql解析的时候,不会按照索引去走。尽量避免这种状况,不然 你的索引就白建了。
      

  3.   

    索引对DML(INSERT,UPDATE,DELETE)附加的开销是很高的,有个测试数据
    索引对于Insert性能降低56%
    索引对于Update性能降低47%
    索引对于Delete性能降低29%
    因此对于写IO压力比较大的系统,表的索引需要仔细评估必要性