$sql = "SELECT a.goods_ids,a.order_id,a.status_endtime,a.is_comment,a.comment_lock,b.suppliers_id,b.mobile,b.qq, b.company_name, a.order_sn, a.order_status, a.shipping_status, a.pay_status, a.shipping_fee, a.postscript, a.add_time, a.pay_id, a.order_amount, " . "(a.goods_amount + a.shipping_fee + a.insure_fee + a.pay_fee + a.pack_fee + a.card_fee + a.tax - a.discount) AS total_fee ". " FROM ecs_order_info as a left join ecs_suppliers as b on a.suppliers_id=b.suppliers_id WHERE a.user_id = '$user_id' ORDER BY a.add_time DESC"; $res = $GLOBALS['db']->SelectLimit($sql, $num, $start);
这是我写的一个 ecshop订单的联表查询,数据读写都没问题,但是现在订单多了查询变得特别特别慢,我不知道这个该怎么优化,希望大神帮忙!一定重谢!
这是我写的一个 ecshop订单的联表查询,数据读写都没问题,但是现在订单多了查询变得特别特别慢,我不知道这个该怎么优化,希望大神帮忙!一定重谢!
explain select ...
show index from ..
以供分析。
另外为什么a表会有这么多个索引,状态字段都要建索引?
explain不是那样用的,要explain下你的select语句即explain $sql(这个$sql是你的select语句)
然后在MYSQL中 explain select ..
ecs_order_info 表可以创建一个联合索引:create index idx_ecs_order_info_cc on ecs_order_info(user_id,add_time desc)
我把索引都给删掉了 象你说的explain 了一下
我把索引都删掉了 ,然后重新explain select 了一下 您看下图片
WHERE a.user_id = $user_id
WHERE a.user_id = $user_id
是 mediumint(8) 类型,按照版主你说的,删掉引号也不起作用,还是慢的很厉害
我把索引都给删掉了 象你说的explain 了一下
a 表全表扫描,b表使用了主键索引,所以在a表建立索引,你a表的主键索引可以不要删除。
我把索引都给删掉了 象你说的explain 了一下
a 表全表扫描,b表使用了主键索引,所以在a表建立索引,你a表的主键索引可以不要删除。
已经解决了谢谢您回复本帖!
WHERE a.user_id = $user_id已解决谢谢回复!