re 条件, 查询3:
1 explain analyze select r.*,a.username from t_portal_resource r
2 left join t_uc_account a on r.userid=a.id left join (select resourceid
postgresql执行计划理解(二)
3 from t_portal_cate_res where categoryid in (1)) t on r.id=t.resourceid order by istop desc, r.id desc limit 10 offset 0
那么什么时候会参数合并merge join 呢。many-to-many 的查询,例如t_portal_cate_res(resourceid,categoryid) 和 t_portal_cate_user(categoryid,userid)
查询4:
1 explain analyze select rs.resourceid from t_portal_cate_res rs
2 left join t_portal_cate_user ca on rs.categoryid=ca.categoryid
但是当把查询4 加上where条件后 where ca.userid=1. 就会变成nest loop 查询。
所以在many-to-many 的表连接查询的时候尽量转换为小表 one-to-many 查询,加上where 条件等等方式优化sql。