为了账号安全,请及时绑定邮箱和手机立即绑定

这条mysql查询是否还有优化的余地?

这条mysql查询是否还有优化的余地?

UYOU 2019-04-19 16:11:34
Post.includes(:user).where('sticky=trueORidin(selectpost_idfrom`feeds`whereuser_id=?)',current_user.id).page(params[:page]).per(15)意即SELECTCOUNT(*)FROM`posts`WHERE`posts`.`trashed`=0AND(sticky=trueORidin(selectpost_idfrom`feeds`whereuser_id=1))
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

优化的第一步是得分析,使用EXPLAIN。
用OR一般都可以使用UNION来优化,如果子查询selectpost_idfromfeedswhereuser_id=1的结果会很大就不推荐使用IN,用JOIN可能会更好。
                            
查看完整回答
反对 回复 2019-04-19
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

@Mr_Jing说的都很对,接着他的说,最好不用子查询,变成where条件,转换不成where的话转换成join,如果一行的数据比较大不推荐count(*)最好count(主键),尤其是数据库引擎为InnoDB的时候。再次强调要用EXPLAIN来分析
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信