向大家请教几个mysql优化,学习了

xiaopingguoer 2011-10-10 10:41:11
第一条: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;
...全文
49 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2011-10-12
  • 打赏
  • 举报
回复
具体的要看执行计划那块需要改进的地方了。但要想真正的把sql学好必须深入的研究。
知道其中原理,不要学肤浅的。就会写几个sql.
luyun2011 2011-10-12
  • 打赏
  • 举报
回复
GROUP BY子句会显著降低查询效率
dingyh07 2011-10-11
  • 打赏
  • 举报
回复
第1条的left不用也可以的,因为如果O表没有数据的话,u.user_id group by 后的计数也是1,用户表中的用户名没有重复的,自然不满足count(*)>=10的条件
xiaobn_cn 2011-10-11
  • 打赏
  • 举报
回复
个人认为这三条sql没有再优化的必要了,已经很优了。

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧