数据库是百万级别的,其中一个字段A是离散型的(即A只有为数不多的几十种值),另一个字段T为时间戳类型(在此字段建立了索引),现在要查询A为下面几个值“a1,a2,a3”并且B在“t1-t2”的所有记录,怎么编写查询语句速度会快点。

解决方案 »

  1.   

    要么和1L一样建立复合索引..要么再a b上单独建立索引试试
      

  2.   

    在A上建个索引,B上已经有索引了,那么
    select * from table where a='a1' and b between t1 and t2
    union all
    select * from table where a='a2' and b between t1 and t2
    union all
    select * from table where a='a3' and b between t1 and t2这样每个小查询都能够用到索引搜索,效率会有所提高。
      

  3.   

    我的查询语句是这样写的,请各位大虾看看,应该怎么修改select tmp.* 
    from 
    (
       select * 
       from Table force index(index_T)
       where T between t1 and t2
    ) as tmp
    where tmp.A in(a1,a2,a3);