mysql语优化请教

如题
PHP 版本:7.4.11
表结构
| id | network_id | shipment_status|
| ———— | ———— | ————– |
| 1 | 5 | 0 |
| 2 | 5 | 1 |
数据有200W条
业务需要统计总条数、shipment_status等于0的总数、shipment_status等于1的总数
现在的sql语句如下

SELECT
    count(*) AS num,
    count( CASE WHEN shipment_status = 0 THEN shipment_status END ) AS dist,
    count( CASE WHEN shipment_status = 1 THEN shipment_status END ) AS sign,
    network_id AS NETWORKID 
FROM
    wuliu_post_orders 
WHERE
    network_id IN ( '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16' ) 
GROUP BY
    NETWORKID 
ORDER BY
NETWORKID ASC

查询的耗时为34.56s,请问该sql应该如何优化?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 21
chowjiawei

建索引 请问看总数 为什么要orderby??

2年前 评论
chowjiawei (作者) 2年前

30多秒? 是不是写错了哦,可以建个联合索引(network_id,shipment_status)

2年前 评论

发一下 explain 的截图

2年前 评论
wanghan

要是我就写3个sql查,又不是不能用

2年前 评论
2年前 评论
琴玖-klein 2年前
zhengfan 2年前

建立联合索引( network_id , shipment_status )

2年前 评论
会尿尿的大鲨鱼 (楼主) 2年前
zhengfan 2年前
会尿尿的大鲨鱼 (楼主) 2年前
zhengfan 2年前
zhengfan 2年前

我有一个朋友,说:

SELECT
    count(*) AS num,
    (select count(*) from wuliu_post_orders WHEN shipment_status = 0 and network_id = wuliu.network_id) AS dist,
    (select count(*) from wuliu_post_orders WHEN shipment_status = 1 and network_id = wuliu.network_id) AS sign,
    network_id  
FROM
    wuliu_post_orders wuliu
WHERE
    network_id IN ( '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16' ) 
GROUP BY
    network_id 
ORDER BY
network_id ASC

network_id 字段跟 shipment_status 建立联合索引 查询超过三秒你加 110 这个 wx 号来骂我

2年前 评论
chowjiawei 2年前
会尿尿的大鲨鱼 (楼主) 2年前
wanQQ 2年前
会尿尿的大鲨鱼 (楼主) 2年前
wanQQ 2年前
会尿尿的大鲨鱼 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!