共計 1343 個字符,預(yù)計需要花費 4 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 MySQL 百分位數(shù)計算如何進行優(yōu)化,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
主要是采用存儲過程, 在中間計算結(jié)果中, 增加了一個索引
原來的 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 百分位數(shù)計算如何進行優(yōu)化”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!