我有一個很大的MySQL表,即使正確索引它可能需要1秒的每個查詢(聽起來不是很多,但它運行數千個服務器)。目前,我有四個查詢需要獲得第95百分位入境,第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行。
從技術上講,這在單個查詢中給出了答案。但是,它會變得很慢 – mvp
@mvp由於查詢排序順序不同(蘋果和橙子),因此無法以有效的方式將兩個第95百分位組合成一個查詢。 – SheetJS
那麼,即使你用第5個百分點代替第95百分位數(請參閱我的回答),它會使你的查詢速度更快。 – mvp