加入收藏 | 设为首页 | 会员中心 | 我要投稿 爱站长网 (https://www.0584.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL百分位数计算如何进行优化

发布时间:2022-01-10 16:03:11 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MySQL百分位数计算如何进行优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 主要是采用存储过程,在中间计算结果中,增加了一个索引 原来的SQL sele
      小编给大家分享一下MySQL百分位数计算如何进行优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
 
      主要是采用存储过程,在中间计算结果中,增加了一个索引
 
       原来的SQL
 
 
    select t5.query_time,t5.ts,t2.v from (
    select query_time,total,v, floor(1+(total-1)*v) rn
    from (
         select query_time,count(*) total from t group by query_time
    ) t3, (select 0.71 v,1 seq union all select 0.81,2 union all select 0.91,3) t4
)
t2 inner join (
    select
    query_time,
    case when @gid=query_time then @rn:=@rn+1 when @gid:=query_time then @rn:=1 end rn,
    ts
    from (
        select * from t ,(select @gid:='',@rn:=0) vars order by query_time,ts
    ) t1
) t5 on (t2.query_time=t5.query_time and t2.rn=t5.rn )
 
 
改进为存储过程
 
 
drop procedure p;
delimiter $$
create procedure p()
begin
    drop table if exists tmp_result;
    
    create temporary table tmp_result(
        query_time date,
        rn int,
        ts float,
        key(query_time,rn)
    ) engine =memory;
    
    insert ignore into tmp_result
    select
    query_time ,
    case when @gid=query_time then @rn:=@rn+1 when @gid:=query_time then @rn:=1 end rn,
    ts
    from (
        select * from t ,(select @gid:='',@rn:=0) vars order by query_time,ts
    ) t1 ;
    select t5.query_time,t5.ts,t2.v from (
        select query_time,total,v, floor(1+(total-1)*v) rn
        from (
             select query_time,count(*) total from t group by query_time
        ) t3, (select 0.71 v,1 seq union all select 0.81,2 union all select 0.91,3) t4
    )
    t2 inner join tmp_result t5 on (t2.query_time=t5.query_time and t2.rn=t5.rn );
end $$
delimiter ;
call p
使用存储过程 一般 11秒 左右
 
以上是“MySQL百分位数计算如何进行优化”这篇文章的所有内容,感谢各位的阅读!

(编辑:爱站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!