SELECT p.fk_uid, SUM(p.point) AS poi, r.*
FROM t_point_log AS p 
LEFT JOIN t_ord_prd_review AS r ON p.fk_uid =r.fk_uid 
WHERE p.fk_uid IN(SELECT DISTINCT(fk_uid) FROM likeku.t_ord_prd_review)
GROUP BY p.fk_uid
ORDER BY poi DESC
LIMIT 5
;
SELECT p.fk_uid, SUM(p.point) AS poi, r.*
FROM (select * from t_point_log WHERE fk_uid IN(SELECT DISTINCT(fk_uid) FROM likeku.t_ord_prd_review)) AS p 
LEFT JOIN t_ord_prd_review AS r ON p.fk_uid =r.fk_uid 
GROUP BY p.fk_uid
ORDER BY poi DESC
LIMIT 5
;

解决方案 »

  1.   

    没细看,不过一般来说  IN(SELECT DISTINCT(fk_uid) FROM likeku.t_ord_prd_review) 的效率显然不高。
      

  2.   

    个人觉得第2条稍微好点,应为第2条的P表已经过滤掉了一些数据,结果集小.连接表的优化原则就是小结果集驱动大结果集;
    楼主可以自己测试,看那个消耗的厉害;
    用show status like 'Last_query_cost' 看看就清楚了;