积木工具箱 发表于 2021-8-17 10:42

sql执行速度太慢

select pu.user_id , pu.name , pu.account , pu.icon ,count(par.px_ad_record) as sum from px_user pu LEFT JOIN px_ad_record par on pu.user_id = par.user_id
                            where state != 1 GROUP BY user_idORDER BY sum desc LIMIT 0,100

如以上sql 查询两万条数据要4秒多 我知道是卡在分组速度上 有什么办法可以优化吗

zjchxj 发表于 2021-8-17 10:52

给state px_ad_record = 加上索引看看

DamonSalvatore 发表于 2021-8-17 10:58

px_ad_record 先分组求和再关联px_user 表

骑着蚂蚁兜风 发表于 2021-8-17 11:04

我们一般是拆成多条sql去跑的

currentdirect 发表于 2021-8-17 11:28

你说两万条数据,但是sql里面有两张表,你也不说是哪张表,如果这两张表都是两万条数据,left join之后就是两万×两万条数据

JuncoJet 发表于 2021-8-17 11:36

慢了才能给业主提需求升级产品和服务器啊,金蝶就是这么个套路

liu8359 发表于 2021-8-17 11:37

user_id都是主键吗,设个外键,state加索引

15502632622Zx 发表于 2021-8-17 11:41

这种统计本来就很慢 ,group by 之后还要排序,px_ad_record 这个表必须加user_id索引,不行的话用redis的zset做排序,toB的话只能慢了,数据再多会更慢

Abin011101 发表于 2021-8-17 11:48

加索引什么的就不说了,通过分析这个语句,我大致理解的是px_user表的user_id是唯一的,px_ad_record表里同一个user_id对应了多条记录,如果是这样的话,你要查count(px_ad_record)LIMIT 0,100,关联之前可以将px_ad_record 表先按user_id分组查出来LIMIT 0,100 缩小结果集,然后再关联px_user表。可以先这样试一下。

825578598 发表于 2021-8-17 11:50

执行的时候先看看有没有命中索引,如果没有命中,就想办法命中,如果没索引就加索引,2万条数据,还是很好优化的
页: [1] 2
查看完整版本: sql执行速度太慢