无敌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
表数据在十万级别
...全文
187 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 的索引是什么情况的?
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-12-04 10:05
社区公告
暂无公告