
Oracleには、SQLの実行処理時に、実行計画を作成してくれます。
オプティマイザにも下記の2種類が存在します。
- CBO
- RBO
CBO(コストベース・オプティマイザ)
テーブル、列、索引等の統計情報を使用して、最適な実行計画を立てていく方式です。
メリット
データの件数の偏りに左右されず、最適な実行計画を立てることができる。
デメリット
データ件数が一気に増減した場合に、最適な実行計画を立てずに古い実行計画のまま実行してしまうと、突然パフォーマンスが低下する可能性がある点。
RBO(ルールベース・オプティマイザ)
※Oracle10g以降はサポート対象外になっています。基本は、CBOを使います。
あらかじめ決められたルールを元に実行計画を作成する方式です。(例えば、検索条件として指定された列に、索引が作成されているか確認し、その索引を利用する等)
メリット
データの増減に左右されず、安定した実行計画を作成することができる点。
デメリット
データの偏り(件数等)によって、もっと最適なSQLを作成できるのにも関わらずできない点。
Oracleの新機能に対応できていない点(RBOが10g以降サポート対象外になったのは、この理由も大きいみたいです。)
オプティマイザの設定方法
該当のOracleDBが、どのオプティマイザを使用するかは下記の「初期化パラメータ」で設定します。
1 |
ALTER SESSION SET OPTIMIZER_MODE = "設定値" |
設定値の種類
設定値 | 説明 |
---|---|
CHOOSE | デフォルト値、SQLの該当テーブルに、一つでも統計情報があればCBO、なければRBOを使う。 |
RULE | RBO固定 |
FIRST_ROWS | CBO固定、最初の1行の応答時間を最小に抑える実行計画とする。 |
FIRST_ROWS_n | CBO固定、最初のN行の応答時間を最小に抑える実行計画とする。 |
ALL_ROWS | CBO固定、全体の処理時間を最小に抑える実行計画とする。 |
この記事へのコメントはありません。