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

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))
UYOU
浏览 352回答 2
2回答

慕容708150

优化的第一步是得分析,使用EXPLAIN。用OR一般都可以使用UNION来优化,如果子查询selectpost_idfromfeedswhereuser_id=1的结果会很大就不推荐使用IN,用JOIN可能会更好。

一只斗牛犬

@Mr_Jing说的都很对,接着他的说,最好不用子查询,变成where条件,转换不成where的话转换成join,如果一行的数据比较大不推荐count(*)最好count(主键),尤其是数据库引擎为InnoDB的时候。再次强调要用EXPLAIN来分析
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript