MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2825|回复: 5
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-11 14:05:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一条: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.payment_status = 2 AND short_time in
(20110928,20110927,20110926,20110925,20110924,20110923,20110922) AND o.store_id = '28' AND order_status  IN ('1','2')  AND shipping_status   IN ('0','1')  ORDER BY o.add_time DESC LIMIT 0, 90

第二条:SELECT g.goods_id, g.goods_name, g.goods_sn, g.promote_price, g.shop_price, g.cost_price, g.market_price, g.is_on_sale, g.is_best, g.is_new, g.is_hot, g.is_index, g.style_sort, g.goods_number,g.goods_number_A, g.integral, SUM(og.goods_number) AS sell_count, g.click_count, g.quota, (g.promote_price > 0 AND g.promote_start_date <= '1317225599' AND g.promote_end_date >= '1317225599') AS is_promote, g.sort_order, FROM_UNIXTIME(g.add_time, '%Y-%m-%d') AS add_date, g.goods_thumb, g.goods_class,g.up_down_tip  FROM `pb89_online`.`mf_goods` AS g LEFT JOIN `pb89_online`.`mf_order_goods` AS og ON og.goods_sn = g.goods_sn  WHERE is_delete='0'  AND g.is_real='1' GROUP BY g.goods_id ORDER BY is_on_sale DESC
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶1 踩
2#
发表于 2011-10-13 10:01:20 | 只看该作者
乱码七糟,都不想看。

有好逻辑使语句简单。
多用用explian
检查索引
尽量少用in
...
3#
发表于 2011-10-14 05:59:59 | 只看该作者

第一个SQL语句的整理

本帖最后由 je_ck 于 2011-10-14 06:11 编辑

SELECT *
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.payment_status = 2 AND
short_time in (20110928,20110927,20110926,20110925,20110924,20110923,20110922) AND
o.store_id = '28' AND
order_status  IN ('1','2')  AND
shipping_status   IN ('0','1')  
ORDER BY o.add_time DESC
LIMIT 0, 90
4#
发表于 2011-10-14 06:11:04 | 只看该作者

第一个SQL语句的点评

本帖最后由 je_ck 于 2011-10-14 06:11 编辑

好像你所有操作都是围绕o(`pb89_online`.`mf_order`)来做的。
left join 感觉作用不大。
你可以考虑这样写
SELECT *
FROM (select * from `pb89_online`.`mf_order` WHERE 1 =1  AND
o.payment_status = 2
AND short_time in (20110928,20110927,20110926,20110925,20110924,20110923,20110922)
AND o.store_id = '28' AND order_status  IN ('1','2')  AND shipping_status   IN ('0','1')  
ORDER BY o.add_time DESC LIMIT 0, 90
)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

对于想通过联合过滤的,可以采用定时删除的方式。

5#
发表于 2011-10-14 06:13:12 | 只看该作者

第二个SQL语句的整理

本帖最后由 je_ck 于 2011-10-14 06:13 编辑

SELECT *
FROM `pb89_online`.`mf_goods` AS g
        LEFT JOIN
`pb89_online`.`mf_order_goods` AS og
ON og.goods_sn = g.goods_sn  
WHERE is_delete='0'  AND g.is_real='1' GROUP BY g.goods_id
ORDER BY is_on_sale DESC
6#
发表于 2011-10-14 06:14:37 | 只看该作者
像第二个就是比较简单的。如果你对性能不满意,我认为只有添加索引来解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-9-20 08:14 , Processed in 0.073648 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表