RussellWestbrook
RussellWestbrook
2015-10-10 07:45
采纳率: 50%
浏览 3.4k

mysql语句查询时间过长如何优化?

SELECT t1.id, t1.order_no, t1.order_status, t1.pay_status,t1.shipping_status,
t1.pay_method, t1.invoice, t1.remark, t1.seller, t1.buyer, t1.site_id, t1.order_time, t1.pay_time,
t1.sign_for_time, t1.delivery_time, t1.subtotal, t1.freight, t1.invitation, t1.cope, t1.is_comment,t1.pay_discount FROM zcwl_order t1 LEFT JOIN
zcwl_order_shipping_address t2 ON t2.order_id = t1.id
WHERE t1.site_id ORDER BY t1.order_time DESC

这条sql语句需要查14秒 如何缩短时间?
ps:大概有1W条数据
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • RussellWestbrook
    RussellWestbrook 2015-10-12 01:17
    已采纳

    ORDER BY t1.order_time DESC 加上倒序后查询会很慢 写在里面就可以了

    点赞 评论
  • simaweier
    来到我身边 2015-10-10 08:16

    创建索引,为什么提交不上

    点赞 评论
  • zzksy1101
    zzksy1101 2015-10-10 08:29

    这大概是订单和收货地址表的连接查询。
    情况1:看你返回值中没有t2的字段,如果不需要收货地址的字段可以不必要连表。
    情况2:你可以不进行连表查询,可以先将收获地址表的数据获取存入数组,将该数组转化成array(order_id->array(id=>'',order_id=>'',name=>'张三',..))
    这种方式。然后与订单表数据的数组通过order_id拼接。这种方式相对于连表来说多耗内存,复杂点,但对数据库压力相比较小。
    获取t1所有字段时可以用t1.*,而不必要写那么多字符了。
    上面这只是我的个人观点,你可以试试看,测测运行时间。

    点赞 评论
  • hly_rain
    阿木王 2015-10-10 09:33

    WHERE t1.site_id ORDER BY t1.order_time DESC
    该语句是不是有什么问题,t1.site_id =?

    点赞 评论
  • linych
    Tarry-Lin 2015-10-10 09:53

    通过创建关联表的索引可以提高查询的速度,另外也可先通过对zcwl_order 的条件筛选再进行连表操作

    点赞 评论

相关推荐