语句如下: select e.id from ext e where (day('2007-04-05 17:21:32') - day(e.add_time) =1) and e.clbj !='1' order by e.wfsj desc limit 0,2; 加上order by后通过网闸查询MySql要50多秒,不加又不行,这个语句的意思是查询日期的前天的记录中的前两条,高手帮着优化一下
首先,where条件中表达式左边最好只是简单的字段名,可以使用索引。
于是可写成
SELECT e.id FROM ext e WHERE e.add_time>=CANCAT(CURDATE() - INTERVAL 1 DAY,' 00:00:00') AND e.add_time<=CANCAT(CURDATE() - INTERVAL 1 DAY,' 23:59:59')
AND e.clbj !='1' ORDER BY e.wfsj DESC LIMIT 0,2
select e.id
from ext e where e.add_time<'2007-04-05'- ADD(CURDATE(),INTERVAL 1 DAY)
and e.clbj !='1' order by e.wfsj desc limit 0,2
用这个试试,再在add_time上加索引
用 explain
select e.id from ext e where (day('2007-04-05 17:21:32') - day(e.add_time) =1)
and e.clbj !='1' order by e.wfsj desc limit 0,2;
看一下执行计划,在需要的地方建立索引.或者交换一下条件位置(看记录的情况)