【发布时间】:2013-11-04 00:39:30
【问题描述】:
我有一个大型 MySQL 表,即使索引正确,每个查询也可能需要 1 秒(听起来并不多,但它运行在数千台服务器上)。现在,我有四个查询要进行,以获得第 95 个百分位的入站、第 95 个百分位的出站以及两者的总和。
查询 1:获取行数以获取第 95 个百分位行
SELECT round(count(*)*.95 FROM traffic WHERE server_id = 1;
查询 2&3 得到第 95 个百分位
SELECT inbound FROM traffic WHERE server_id = 1 ORDER BY inbound ASC LIMIT {95th},1
SELECT outbound FROM traffic WHERE server_id = 1 ORDER BY outbound ASC LIMIT {95th},1
查询 4 获取流量总和
SELECT sum(inbound+outbound) FROM traffic WHERE server_id = 1;
你能想出什么方法可以结合这些吗?我面临着想办法的挑战,因为我需要得到第 95 个百分位数,这是通过根据计数选择特定行来计算的。例如,如果有 10000 行,则按升序排列并选择第 9500 行。
【问题讨论】:
标签: mysql sql database performance percentile