帮我优化下这条sql

amu1433 2019-09-09 02:27:42

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分钟都出不来,建立的索引无用!该怎么优化下
...全文
185 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2019-10-07
  • 打赏
  • 举报
回复
等号左边,不要用函数。
蜕变之痛 2019-10-04
  • 打赏
  • 举报
回复
性能问题1:时间函数问题,可以用mysql5.7以上版本,建立时间函数索引可解决,DATE_FORMAT( nl_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
性能问题2:in子查询,修改为exists或用join代替。
Hello World, 2019-09-10
  • 打赏
  • 举报
回复
子查询的in可以用exists代替,不是inner join
Hello World, 2019-09-10
  • 打赏
  • 举报
回复
不要在条件中计算,像DATE_FORMAT( nl_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' ),计算出月初月末日期,用between,子查询可以用inner join
  • 打赏
  • 举报
回复
我知道用相关子查询, 但是怎么写呢,我研究下, 表A ,表B , 取重复部分, 然后在条件过滤下
stelf 2019-09-09
  • 打赏
  • 举报
回复
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')

56,875

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧