我有个站,打开一直感觉有点偏慢,我以为是网站线路的问题。最近维护服务器发现,显示的负载一直不太正常,没人访问的时候,居然也在1-3之间这就有点奇怪了,后来发现是因为系统每分钟执行一个定时任务造成的,我将这个定时任务删除后,负载立即降到0.0-0.5左右一切恢复正常了原来这个定时任务,是我搞的发邮件的程序用php写的,流程大体是这样,比如用户在网站上进行了一些操作,系统会在mysql数据库的email表里插入一条记录然后定时任务每一分钟都去读这个表,看看有没有未被发送的邮件记录,如果有,就开始发邮件,发完了,再将这条记录的状态修改成已发送我觉得问题就出在这条sql语句上面,这个语句是每分钟读email表的,所以应该是它造成了服务器负载长期变大而且当email表里为空的时候,负载也是很大$SQLString = "select * from email where status=0 order by id asc limit 0,10";上面这条语句是读取email表的最后10条记录,条件是status字段为0
请问我现在应该怎么优化它?或者有什么其他比较好的办法?

解决方案 »

  1.   


    创建 (status,ID)的索引。
      

  2.   

    http://www.sphinxsearch.org/archives/19可以参考
      

  3.   

    status有几种值,在status、ID上建立索引试试
      

  4.   

    看楼主的字段名称,可以估计出ID是主键,STATUS是状态值。ID肯定是有索引的,状态值建索引不靠谱。explain select * from email where status=0 order by id asc limit 10;
    看看
      

  5.   

    多建立一个表,如emaillogemail表的纪录发邮件后,插入纪录到emaillog表中,然后删除email表中对应的记录!
      

  6.   


    你的猜测很正确,我刚找了下关于mysql的explain用法说明,不知道加上这个效果会不会好些。不过最近网站感觉负载没那么高了,等高的时候再试吧。
      

  7.   

    创建 ( status,id ) 的复合索引。