90パーセンタイル値取得
最近、とあるアプリケーションの性能測定を行っています。
そこで処理時間の90パーセンタイル値をログから取得することにしました。
90パーセンタイル値というのは処理時間の大きい10%のケースを例外として除外し、残りの90%のケースで最大値を求めるものです。
ログはMicrosoft Accessに格納されており、以下のようなSQLを考えました。
求める結果は得られたのですが、最深部の副問合せのコストが大きく、10万件のログで1〜2時間かかってしまいます。
何かよいチューニング方法があるでしょうか?
アイデアをお持ちの方はぜひコメントをお願いします。
select 処理ID, max(処理時間) from ( select 処理ID, 処理時間 from ( select 処理ID, 処理時間, (select count(*) from ログ where 処理ID = t1.処理ID and 処理時間 < t1.処理時間) count, (select count(*) from ログ where 処理ID = t1.処理ID group by 処理ID) total from ログ t1) t2 where count / total < 0.9) t3 group by 処理ID;