MySQL百分位數計算(第三次優化)
第一版:
http://blog.itpub.net/29254281/viewspace-2157111/
第二版:
http://blog.itpub.net/29254281/viewspace-2157209/
第三版:
http://blog.itpub.net/29254281/viewspace-2157299/
在第三版 第二個SQL的基礎上優化
主要是採用儲存過程,在中間計算結果中,增加了一個索引
原來的SQL
改進為儲存過程
使用儲存過程 一般 11秒 左右
優化從 140秒 到 33秒 到 22秒 到 15秒
最終定版在 11秒
http://blog.itpub.net/29254281/viewspace-2157111/
第二版:
http://blog.itpub.net/29254281/viewspace-2157209/
第三版:
http://blog.itpub.net/29254281/viewspace-2157299/
在第三版 第二個SQL的基礎上優化
主要是採用儲存過程,在中間計算結果中,增加了一個索引
原來的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
優化從 140秒 到 33秒 到 22秒 到 15秒
最終定版在 11秒
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2157303/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL百分位數計算(優化版)MySql優化
- MySQL百分位數計算(再優化版)MySql優化
- 使用預計算分割槽優化引數化優化
- Java計算百分比保留整數Java
- COUNT(*)計算行數有哪些優化手段優化
- MySQL-建立計算欄位MySql
- [MYSQL-10]計算欄位MySql
- MySQL優化之系統變數優化MySql優化變數
- MySQL引數配置優化MySql優化
- 在 MySQL 中,如何計算一組資料的中位數?MySql
- Mysql優化系列(1)--Innodb重要引數優化MySql優化
- MySQL 效能優化之快取引數優化MySql優化快取
- Java 兩個整數相除保留兩位小數,將小數轉化為百分數Java
- MySQL設計與優化MySql優化
- Android效能優化篇之計算效能優化Android優化
- Java中計算百分比(DecimalFormat是NumberFormat的一個具體子類,用於格式化十進位制數字)JavaDecimalORM
- Mysql 效能優化--基礎引數MySql優化
- MySQL 資料庫效能優化之快取引數優化MySql資料庫優化快取
- MySQL 配置InnoDB配置非持久優化器統計資訊引數MySql優化
- MySQL 5.7資料庫引數優化MySql資料庫優化
- Laravel 數量統計優化Laravel優化
- Dynamics CRM使用計算欄位自動計算兩個時間欄位的天數差
- MySQL效能優化之索引設計MySql優化索引
- MySQL資料庫效能優化之快取引數優化(轉)MySql資料庫優化快取
- mysql之 CentOS系統針對mysql引數優化MySqlCentOS優化
- 左百分號模糊查詢的優化優化
- Sql優化(二) 快速計算Distinct CountSQL優化
- 地理空間距離計算優化優化
- Mysql多欄位大表的幾種優化方法MySql優化
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- mysql優化MySql優化
- Mysql 優化MySql優化
- mysql格式化小數保留小數點後兩位(小數點格式化)MySql
- mysql 計算 一個文字欄位的內容一個文字出現的次數MySql
- 另一個視角,使用對數化資料,計算非價位指標指標
- MySQL配置檔案mysql.ini引數詳解、MySQL效能優化MySql優化
- python 計算中位數、四分位數、最大值、最小值等Python
- (mysql優化-3) 系統優化MySql優化