mysql 大量数据查询速度慢,sql语句求解!
先说需求:sal_orders是一张订单表,需要查找出所有会员的vip_id和第一次与第二次购买时间间隔天数(购买时间为create_time,可能没有第二次购买),下面...
先说需求:
sal_orders 是一张订单表,需要查找出所有会员的vip_id和第一次与第二次购买时间间隔天数(购买时间为create_time,可能没有第二次购买),
下面这条sql,在数据只有几百条的时候还好,但几万条记录的时候,就会一直执行,根本停不下来……
写sql技能非常渣,求教大神,该怎样写才能满足需求?感谢! 展开
sal_orders 是一张订单表,需要查找出所有会员的vip_id和第一次与第二次购买时间间隔天数(购买时间为create_time,可能没有第二次购买),
下面这条sql,在数据只有几百条的时候还好,但几万条记录的时候,就会一直执行,根本停不下来……
写sql技能非常渣,求教大神,该怎样写才能满足需求?感谢! 展开
2个回答
展开全部
这个问题和设计有关系, 简单的sql优化提升不了多少, 但是这个sql还是可以进一步优化的
利用索引, 用union all代替in, 如 select * from tab where id in (1,2), 可写成select * from tab where id = 1 union all
select * from tab where id = 2
但是上面的优化起不到根本效果, 如果100万 1000万数据怎么办, 难道每次都要全部查出来嘛, 那是不可能的, 而且你的页面也不能全部都展示出来! 所有需要换个思路, 如, 将一个会员的订单记录查询出来, 然后通过程序(java或者存储过程)算出时间差, 按照上面再计算下一个会员;
利用索引, 用union all代替in, 如 select * from tab where id in (1,2), 可写成select * from tab where id = 1 union all
select * from tab where id = 2
但是上面的优化起不到根本效果, 如果100万 1000万数据怎么办, 难道每次都要全部查出来嘛, 那是不可能的, 而且你的页面也不能全部都展示出来! 所有需要换个思路, 如, 将一个会员的订单记录查询出来, 然后通过程序(java或者存储过程)算出时间差, 按照上面再计算下一个会员;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询