select g.cid,g.provincebk,g.addressbk,g.addrMasterbk,g.telbk,g.remarksbk,g.qualifiedFlgbk,g.priceStatusbk,g.takeFoodFlgbk,g.upImagebk,g.upVideobk,g.orderDetailsbk,g.amountbk,g.bankModebk,g.maxDate as mdate,f.maxRedDate,(to_days(now()) - to_days(f.maxRedDate)) as dfDate from (select t.cumId as cid,t.province as provincebk,t.address as addressbk,t.addrMaster as addrMasterbk,t.tel as telbk,t.remarks as remarksbk,t.qualifiedFlg as qualifiedFlgbk,t.priceStatus as priceStatusbk,t.takeFoodFlg as takeFoodFlgbk,t.upImage as upImagebk,t.upVideo as upVideobk,l.orderDetails as orderDetailsbk,l.amount as amountbk,l.bankMode as bankModebk,l.orderDate as maxDate from t_rsgcustomer as t left join (select * from t_rsgmange as a where a.orderDate=(select max(b.orderDate) from t_rsgmange as b where b.cumId=a.cumId) group by a.cumId) as l on t.cumId = l.cumId group by t.cumId) as g left join (select e.cumId as cid,max(e.orderRedDate)as maxRedDate from t_rsgmange as e group by e.cumId) as f on g.cid = f.cid group by g.cid order by g.cid+0
可以把查询计划贴出来一块分析一下
你这个sql实在是太大了,要想优化得从业务上分开了,分开查询,一次性查出来太困难了,有几点可以参考下:
1.看你用的是mysql,在sql前面加上desc运行一下,查看一下查询计划,对于扫描行数多的加索引之类的
2.你这个的查询where条件比较少就是表关联的太多了,过多的使用子表关联,这样索引就无效了
3.尽量的少在字段上进行计算,比如你的这个to_days(now()) - to_days(f.maxRedDate),完全可以查出来从业务上转换
4.不要把过多的任务放到数据库中一下子查询出来,切记切记,可以从业务中好好设计设计
http://blog.csdn.net/mango_love/article/details/78907679
这里有个博客写得很全,你这个从查询语句上面来优化的地方有点多
sql里面影响速率的几个函数,递归查询,分组,还有union。