比如说在table1 中建立了 col1,col2,col3 3个字段的复合索引,
但是查询用还比较多用到下面的语句select * from table1 where col1=?
select * from table1 where col2=?
select * from table1 where col3=?在这种情况下,是否还需要为col1,col2,col3 这3个字段建单独索引?

解决方案 »

  1.   

    你如果是对col1,col2,col3 3个字段建立了复合索引,并且是col1在前面的话。那么只有你执行“select * from table1 where col1=?”时,才会走索引。按照你的需求,我建议你把复合索引删掉,对三个字段分别建立单列的索引。
      

  2.   

    如果dml操作不频繁的话可以都建。
      

  3.   

    我的查询是下面4种查询都比较多用到,是不是该建1个复合索引和3个淡出索引?select * from table1 where col1=? and col2=? and col3=?
    select * from table1 where col1=?
    select * from table1 where col2=?
    select * from table1 where col3=?
      

  4.   

    可以建三个索引:
    col1,col2,col3
    col2
    col3
      

  5.   

    如果col1,col2,col3 直接没有必然的逻辑关系。就的创建三个索引。
    如果1与2
        1与3 有必然的逻辑关系的话,就不需要创建多个索引。不过你在使用where条件的时候必须的用上 1列。例如
    where  col2 = 'A'
      and  col1 = 'B'
    等价于
       where  col2 = 'A'
    这样可以只是创建一个即可,否则必须创建多个。
      

  6.   

    这种事情不好说,要看数据量和选择度,不过如果这个表主要是查询的,多建立几个也无所谓。
    只有一个复合索引也是可以的,在查询的时候可以考虑使用HINT