Select SUM(fen) sum  from jifen where  type='qiandao' and  DATE_FORMAT( nl_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )  and nl_uid in
(select uid  from user where user_type='2') 
## 数据太大查询速度太慢,3分钟都出不来,建立的索引无用!该怎么优化下

解决方案 »

  1.   


    Select SUM(fen) sum
      from jifen inner join user ur on nl_uid = ur.uid and ur.user_type = '2'
     where type = 'qiandao'
       and nl_time between DATE_ADD(curdate(),interval -day(curdate())+1 day) and date_add(curdate()-day(curdate())+1,interval 1 month);
    --   and DATE_FORMAT(nl_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m')
    --   and nl_uid in (select uid from user where user_type = '2')
      

  2.   

    不要在条件中计算,像DATE_FORMAT( nl_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' ),计算出月初月末日期,用between,子查询可以用inner join
      

  3.   

    子查询的in可以用exists代替,不是inner join
      

  4.   

    性能问题1:时间函数问题,可以用mysql5.7以上版本,建立时间函数索引可解决,DATE_FORMAT( nl_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
    性能问题2:in子查询,修改为exists或用join代替。