【注目記事】
・SEの転職体験談 | 受託開発から自社製品開発へ ・SIer勤務のSEがパソナキャリアに相談してみた ・SIer勤務のSEがマイナビエージェントに相談してみた
SQL Serverで実行プランを確認すると「推定コスト」という言葉が出てきます。
この推定コストについて調べたことをまとめました。
※実行プランの確認は、「SQL Server | 実行プランの確認方法」をご覧ください。
SQL Server の推定コストとは
推定コストは、ある特定の条件の端末(使用している端末に似通った条件だが、端末の情報が100%取得できる訳ではないので、あくまで推定の条件)でクエリ実行した場合のコストを表します。
古いバージョンでは、あるSQL Server開発者の端末で実行した場合の秒数を記載していたようですが、
what “estimated subtree cost = 1” means ? or a great SQL server
新しいバージョンでは、処理時間(ウィールクロック)ではなく、内部の測定時間に基づいて計測され、単位は不明です。
ただし、クエリを単独で実行した際のサブツリーの推定コストの総合計と、処理時間がほぼ同じなため、秒として考えても良いと思われます。
コスト単位は、ウォール クロック時間ではなく、内部測定時間に基づいています。 コスト単位は、プランの相対コストを他のプランと比較して決定するために使用されます。
推定コストの利用方法
推定コストは他のプランと比較するために利用するためのものです。
主な利用方法は下記の通りです。
- 処理時間を短縮したいクエリの中の、どこで大きなコストがかかっているか =改善の余地があるか、の目星をつける
- 同じ要件を満たす複数のクエリのうち、どれがコストが低いのかを比較して確認する
コストが低いプランが処理時間が短いとは限らない
下記の理由で、必ずしも推定コストが低いプランが処理時間が短いとは限りません
- 統計情報が最新でないと、誤った推定コストが出てしまう
- SQL Serverは実行端末の情報を全て把握して推定コストを出しているわけではないため、端末によって差が出る
1の統計情報に関しては、最新の情報を取得すれば解決できます。
2に関しては、例えば実行端末のCPUが強力であれば、CPUの推定コストよりも実際のCPUのコストが小さくなり、結果として処理時間が推定と変わります。
あるいは、ディスクの断片化率やテーブルロック等の他の要素も影響し、推定コストと異なる結果を生み出します。
Incorrect data in Execution Plan?
そのため、厳密に処理時間が短いクエリを選びたい場合は、本番サーバーで処理時間を比較した方が良いです。
しかし、開発段階で本番サーバーを使えない場合もあるので、簡便な物差しとして推定コストを利用した比較を実施するのはありだと思います。
SQLスキルを高めるためのおススメ書籍
SQLのスキルを高めるには、学校の試験勉強と同じように多くの問題を解いてみるのが効率的です。
『スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)』は、SQLの基本的な内容の解説に加え、200問を超える問題が掲載されているので、SQL初心者が学習に使うのにおススメです。
実際、この書籍を新卒1年目の新人さんに2-3週間かけて取組んでもらったことがあり、書籍を読んだ後に簡単なSQLの改修を任せましたが、基本的な部分にはつまずかずに改修を進められました。
[…] ※推定コストの説明は、「SQL Server | 推定コストとは」をご覧ください。 […]