SELECT * FROM tablea WHERE Able=1 AND (VersionAble='' or VersionAble='$Version') AND VersionUnAble<>'$Version' AND DATE_SUB(NOW(),INTERVAL '00:00:00' HOUR_SECOND)>=ATStart AND DATE_SUB(NOW(),INTERVAL '00:00:00' HOUR_SECOND)<=ATEnd order by AddTime DESC执行次数高的时候每分钟有20多次吧,能优化提高速度么?!
ATStart和ATEnd 是有效时间,基本上没用到

解决方案 »

  1.   

    DATE_SUB(NOW(),INTERVAL '00:00:00' HOUR_SECOND)既然减 00:00 ,那为什么还减呢?SELECT * FROM tablea 
    WHERE Able=1 
    AND (VersionAble='' or VersionAble='$Version') 
    AND VersionUnAble <>'$Version' 
    AND NOW()>=ATStart and NOW()<=ATEnd 
    order by AddTime DESC语句的优化需要更多你表中的信息才能判断。 主要是要根据你表中数据实际的分面来创建一些索引来提高查询速度。需要提供以下信息。
    select count(*) from tablea;
    select count(*) from tablea WHERE VersionAble='';select count(*) from tablea WHERE VersionAble='$Version'; 的分布估计
    select count(*) from tablea WHERE VersionUnAble <>'$Version'  的分布估计
    select count(*) from tablea WHERE  NOW()>=ATStart and NOW()<=ATEnd  的分布估计
    最近讨论优化的好象很多。 建议参考一下。http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#query-speed
    7.2. 优化SELECT语句和其它查询http://topic.csdn.net/u/20090531/19/d097093c-987e-440a-b56e-90de9c7d8b4c.html
    Mysql的内联接查询优化http://topic.csdn.net/u/20090526/17/639d78ec-e299-40d0-9c8e-8d5b21229405.htmlhttp://topic.csdn.net/u/20090520/16/a96a2e90-a935-4460-837e-e52b4557c519.html
    
      

  2.   

    索引字段是哪些?WHERE语句使用字段中,哪些内容比较少?
      

  3.   

    小弟对于mysql只能算是依葫芦画瓢 所以难免有多余的地方还请各位大侠指正
      

  4.   

    “DATE_SUB(NOW(),INTERVAL '00:00:00' HOUR_SECOND) 既然减 00:00 ,那为什么还减呢?”
    进行比较时间啊,“NOW()>=ATStart and NOW()<=ATEnd”这样可以直接进行对比?!now()的格式是“2009-6-2 09:23:00” ATStart的格式是“09:23:00”“索引字段是哪些?WHERE语句使用字段中,哪些内容比较少?”
    ATStart和ATEnd 这两项基本上没有用的吧
    现在所使用的tablea中的数据只有不到8条
    8条的情况
    VersionUnAble <>'$Version' 有6条
    Able=1 有5条
    VersionAble均为空
    ATStart均为00:00:00
    ATEnd均为23:59:59一次执行完需要查询3个不同名称的类似表
    高峰时候的运行情况是 每分钟有超过20次的执行我考虑到将这个程序商业化,想找各位大侠指点指点不足之处