データベースの実行計画がどのようなもので、どのように利用されるか記載する。本質の理解を目的としているため特定のシンプルな構成を例に説明する。
実行計画の目的
実行計画は、ストレージのデータをユーザーに渡すために、ハードウェアをより効率的に使う手順を計画したものである。主に以下のように利用される。
- データベースが複数の実行計画を作成し、最も効率のいい計画を選択するのに使う。
- DB管理者が適用された実行計画を参照して、データベースが適切な実行計画を選択できているか確認する。
- DB管理者はヒント句を使用して、データベースに効率の良い実行計画を指示する。
実行計画とはどのように作成されるか?
データが含まれているデータベースファイルからwhere 年月日=’2023-07-01’にヒットした100レコードを取得する場合の例で実行計画がどのようなものか記載する。
データベースが対象レコードの物理番地を知っている場合は、直接、対象のブロックをメモリに持ってくれば良い。しかし、where句で指定された条件から物理番地はわからない。そこで、以下A、Bの2つの方法が考えられる。
A. ファイルを全てスキャンしてwhere句の条件にヒットするレコードを取得する。
B. インデックスを使って該当100レコードの物理番地を取得して、1レコードずつ取得する。
どちらの方法が実行計画としてハードウェアを効率的に利用できるだろうか。これはファイルのサイズに依存する。もし、ファイルサイズが100GBならA. はかなり重たく分レベルの時間を要する。一方、B.は、100回のファイルアクセスが発生する。SSDでは1回当たり、0.0005秒程度なので1秒以下でアクセスできる。しかし、ファイルサイズが1MBなら1の方法で全てスキャンした方が高速である。このようにコンテキストを考慮し、どのようにアクセスするべきか計画するのが実行計画である。
しかし、実行計画作成にはファイルサイズ、ディスク性能、インデックス有無等の情報をデータベースが知っておく必要がある。その情報が統計情報であり別の記事で統計情報の詳細を記載する。