温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-11-01 15:14:41 来源:亿速云 阅读:303 作者:小新 栏目:MySQL数据库

小编给大家分享一下MySQL百分位数计算如何进行优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

主要是采用存储过程,在中间计算结果中,增加了一个索引

原来的SQL

  1. select t5.query_time,t5.ts,t2.v from (

  2.     select query_time,total,v, floor(1+(total-1)*v) rn

  3.     from (

  4.          select query_time,count(*) total from t group by query_time

  5.     ) t3, (select 0.71 v,1 seq union all select 0.81,2 union all select 0.91,3) t4

  6. )

  7. t2 inner join (

  8.     select

  9.     query_time,

  10.     case when @gid=query_time then @rn:=@rn+1 when @gid:=query_time then @rn:=1 end rn,

  11.     ts

  12.     from (

  13.         select * from t ,(select @gid:='',@rn:=0) vars order by query_time,ts

  14.     ) t1

  15. ) t5 on (t2.query_time=t5.query_time and t2.rn=t5.rn )



改进为存储过程

  1. drop procedure p;

  2. delimiter $$

  3. create procedure p()

  4. begin

  5.     drop table if exists tmp_result;

  6.     

  7.     create temporary table tmp_result(

  8.         query_time date,

  9.         rn int,

  10.         ts float,

  11.         key(query_time,rn)

  12.     ) engine =memory;

  13.     

  14.     insert ignore into tmp_result

  15.     select

  16.     query_time ,

  17.     case when @gid=query_time then @rn:=@rn+1 when @gid:=query_time then @rn:=1 end rn,

  18.     ts

  19.     from (

  20.         select * from t ,(select @gid:='',@rn:=0) vars order by query_time,ts

  21.     ) t1 ;


  22.     select t5.query_time,t5.ts,t2.v from (

  23.         select query_time,total,v, floor(1+(total-1)*v) rn

  24.         from (

  25.              select query_time,count(*) total from t group by query_time

  26.         ) t3, (select 0.71 v,1 seq union all select 0.81,2 union all select 0.91,3) t4

  27.     )

  28.     t2 inner join tmp_result t5 on (t2.query_time=t5.query_time and t2.rn=t5.rn );

  29. end $$


  30. delimiter ;


  31. call p

使用存储过程 一般 11秒 左右

以上是“MySQL百分位数计算如何进行优化”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI