我有一个大的 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 行。