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_idwhere state != 1 GROUP BY user_idORDER BY sum desc LIMIT 0,100
如以上sql 查询两万条数据要4秒多 我知道是卡在分组速度上 有什么办法可以优化吗 给state px_ad_record = 加上索引看看 px_ad_record 先分组求和再关联px_user 表 我们一般是拆成多条sql去跑的 你说两万条数据,但是sql里面有两张表,你也不说是哪张表,如果这两张表都是两万条数据,left join之后就是两万×两万条数据 慢了才能给业主提需求升级产品和服务器啊,金蝶就是这么个套路 user_id都是主键吗,设个外键,state加索引 这种统计本来就很慢 ,group by 之后还要排序,px_ad_record 这个表必须加user_id索引,不行的话用redis的zset做排序,toB的话只能慢了,数据再多会更慢 加索引什么的就不说了,通过分析这个语句,我大致理解的是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表。可以先这样试一下。
执行的时候先看看有没有命中索引,如果没有命中,就想办法命中,如果没索引就加索引,2万条数据,还是很好优化的
页:
[1]
2