无敌sql优化

ouyangxiaolin 2015-12-04 10:05:49
select (count(*)+1) as pmNum
from (select ts.userId,sum(ts.literAvg*ts.dist)/sum(ts.dist+0) as pmLiterAvg
from t_data ts group by userId having pmLiterAvg > 1 order by pmLiterAvg asc ) pm
where pm.pmLiterAvg <
(select sum(literAvg*dist)/sum(dist+0) from t_data where userId =123 and literAvg>0 and dist>1)

执行计划
id select_type table type rows Extra
1 PRIMARY <derived2> ALL 61 Using where
3 SUBQUERY t_data ALL 401 Using where
2 DERIVED ts ALL 401 Using temporary; Using filesort
表数据在十万级别
...全文
225 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyangxiaolin 2015-12-04
  • 打赏
  • 举报
回复
有高手帮看看吗,怎么优化,三个all扫描。。。
ouyangxiaolin 2015-12-04
  • 打赏
  • 举报
回复
引用 5 楼 defonds 的回复:
[quote=引用 4 楼 defonds 的回复:] userId literAvg dist 这三个字段做一个 btree 联合索引,先优化子查询看看,一步一步来
此外sql 里尽量不要用函数,比如 sum,会不走索引[/quote] 嗯,我先看看
chenjsh_ 2015-12-04
  • 打赏
  • 举报
回复
表没给啊。中间公式计算太繁杂了
Defonds 2015-12-04
  • 打赏
  • 举报
回复
userId literAvg dist 这三个字段做一个 btree 联合索引,先优化子查询看看,一步一步来
Defonds 2015-12-04
  • 打赏
  • 举报
回复
引用 4 楼 defonds 的回复:
userId literAvg dist 这三个字段做一个 btree 联合索引,先优化子查询看看,一步一步来
此外sql 里尽量不要用函数,比如 sum,会不走索引
ouyangxiaolin 2015-12-04
  • 打赏
  • 举报
回复
引用 2 楼 defonds 的回复:
t_data 的索引是什么情况的?
就主键是索引(id)
Defonds 2015-12-04
  • 打赏
  • 举报
回复
t_data 的索引是什么情况的?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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