【ORACLE】オプティマイザと実行計画について


ここでは、ORACLEデータベースにおけるオプティマイザと実行計画について簡単に紹介します。

実行計画の見方や取得方法は↓で紹介していますのでぜひ参考にしてください。
>>【ORACLE】SQLの実行計画の見方
>>【ORACLE】SQLの実行計画を取得する方法

実行計画とは

SQLをどのように実行するか書かれた計画書です。
まさに読んで字のごとくです。

書かれている内容は以下の通りです。
・テーブルやビューにどのような順番でアクセスするか
・テーブルからデータを取得する際、インデックス(索引)を利用するか
・テーブルやビューをどのような結合方法でデータを結合するか

これはSQLの実行速度にダイレクトに影響してきます。

そしてこの実行計画を作成しているのがオプティマイザです。

実行計画の具体的な見方・読み方については
【ORACLE】SQLの実行計画の見方」を参考にしてください。

オプティマイザとは

とっても簡単にいうとORACLEの頭、つまり脳のようなものです。
SQLを実行したとき、オプティマイザがSQLの実行計画を作成します。

SQLの実行計画を作るときは以下の情報から、決められたルールに基づいて最適な実行計画を作成します。
・テーブルの構造や権限といった情報
・インデックス(索引)の情報

オプティマイザは決められたルールに基づいて実行計画を作成します。
ORACLEでは基本的にCBO(コストベースオプティマイザ)というルールになります。

CBOはテーブルの統計情報(データ件数やデータの分布、インデックス内の値の割合など)から、最も効率的だと判断されたアクセス方法、結合方法で実行計画を作成します。

繰り返すようですが、つまりORACLEではテーブルやインデックスのデータの中身から、オプティマイザが独自に最適な方法でデータを取得する計画を作ってくれます。

しかし注意点もあります。
CBOが基にするテーブルの内容、いわゆる統計情報が最新でない場合は必ずしも最適な実行計画が作成されるとは限りません。

統計情報については↓で詳しく解説していますので参考にしてください。
>>ORACLEのテーブルやインデックスの「統計情報」とは

最後に

最後までお読みいただきありがとうございます。

SQLが遅くてお困りの場合は、まずはSQLが遅くなる原因を、こちらで「SQLのレスポンスが遅い原因3つ」で確認してみてください。

この他、SQLのチューニングについては、「SELECT文のSQLチューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。