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

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

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

千万里不及你 2019-04-08 09:21:38
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 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

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

TA贡献1890条经验 获得超9个赞

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

添加回答

举报

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