SELECT count( `Id` ) AS `total` 
FROM `tablename` 
WHERE `createtime` >= '1174585573' 
and `createtime` <= '1285592298'   
and `state` =2 
and `union_id` = 3tablename这个表有2000万条记录
我做一个以上的查询需要20秒请问怎样才能更快点呢?
`Id`是自增的,
其他字段都是int类型是否要建立索引?
应该如果建立索引呢?

解决方案 »

  1.   

    条件字段加索引 但2千万的表...去mysql区问吧 高手多点
      

  2.   

    WHERE `createtime` >= '1174585573' 
    and `createtime` <= '1285592298'  
    and `state` =2 
    and `union_id` = 3  ,条件是由后往前执行,你可以将一次可以过滤最多的条件靠后写,试试看
      

  3.   


    CREATE INDEX index_A ON tablename(createtime,state,union_id)
      

  4.   

    是否要建立索引?
    毋庸置疑,要建立索引。索引的作用就是提高SELECT效率。应该如果建立索引呢?
    这个需要分析你的数据分布,在没有更多信息的情况下,只能说创建一个 (union_id,state,createtime)的复合索引。
      

  5.   

    在有索引的情况下,MYSQL会进行优化,前后与最终的执行方案并无直接联系。
      

  6.   

    mysql自己会优化,与前后顺序无关
      

  7.   

    先用explain  '你的sql语句'命令, 调出你的执行计划,贴出来给大家看下一般来讲,mysql碰见多个and条件时,其中如果有个字段是被索引过了,那么mysql会自动先用被索引的列进行搜索