第一条:SELECT COUNT(o.order_id) AS order_number FROM `pb89_online`.`mf_users` AS u LEFT JOIN `pb89_online`.`mf_order` AS o ON o.user_id = u.user_id  WHERE 1  GROUP BY u.user_id HAVING order_number >= 10
第二条:select sum(og.goods_number) as nums ,og.goods_name,og.goods_sn ,og.goods_id
        from mf_order_goods as og ,mf_order as o, mf_goods as gs  
        where o.order_id =og.order_id  and  gs.goods_id = og.goods_id
        and o.add_time >= '1312819200' 
        and o.add_time <=  '1317225599'
        and gs.style_id <> 6 
        group by og.goods_id  order by   nums desc
        limit 50
第三条:SELECT o.seller_memo,o.order_id, o.order_sn, o.add_time, o.order_status, o.shipping_status, o.order_amount, o.total_amount,o.deal_status,o.confirm_status,o.payment_status,o.payment_id, o.consignee, o.email, o.order_code, o.order_memo, o.order_flag,o.is_error,o.store_id,o.refunds_type,s.store_name, IFNULL(u.user_name, '匿名用户') AS user_name FROM `pb89_online`.`mf_order` AS o  LEFT JOIN `pb89_online`.`mf_users` AS u ON u.user_id = o.user_id LEFT JOIN `pb89_online`.`mf_store` AS s ON s.store_id = o.store_id WHERE 1 =1  AND o.shipping_status = 0 AND o.short_time >= '20110927' AND o.add_time <= '1317139199' AND o.store_id = '30' ORDER BY o.add_time DESC LIMIT 0, 15;

解决方案 »

  1.   

    个人认为这三条sql没有再优化的必要了,已经很优了。
      

  2.   

    第1条的left不用也可以的,因为如果O表没有数据的话,u.user_id  group by 后的计数也是1,用户表中的用户名没有重复的,自然不满足count(*)>=10的条件
      

  3.   

    GROUP BY子句会显著降低查询效率
      

  4.   

    具体的要看执行计划那块需要改进的地方了。但要想真正的把sql学好必须深入的研究。
    知道其中原理,不要学肤浅的。就会写几个sql.