オプティマイザ(optimizer)とは何か
オプティマイザ(optimizer)をしっかり理解することでSQL実行の仕組みが理解でき、パフォーマンス向上に寄与することが可能となります
オプティマイザ(optimizer)とは
オプティマイザ(optimizer)とは、SQLを効率的に実行するための仕組みのことであり、SQLの最適化及び実行計画(データへのアクセスパス)の作成を行います。オプティマイザには、ルールベースオプティマイザ(RBO:Rule Base optimizer 構文駆動型)とコストベースオプティマイザ(CBO:Cost Base optimizer 統計駆動型)があります
ルールベースオプティマイザとは
ルールベースオプティマイザは(RBO:Rule Base optimizer 構文駆動型)は、SQL構文のルールに基づき実行計画を選択する方法です。当初のOracleはこちらが主流でしたが、Oracle10g以降はサポートされなくなりました。現在はヒント句によってルールベースオプティマイザを使用することが可能です
◆ルールベースオプティマイザのメリット
・統計情報に左右されないというメリットがあります
◆ルールベースオプティマイザのデメリット
・データ量やインデックス量の増加など環境変化に対応できないというデメリットがあります
・ハッシュ結合、パラレルクエリ、パーティション表の機能など最新の機能が使えないというデメリットがあります
コストベースオプティマイザ
コストベースオプティマイザ(CBO:Cost Base optimizer 統計駆動型)は、統計情報に基づきリソースコストの最も低い実行計画を選択する方法です。現在はこちらが主流です
◆コストベースオプティマイザのメリット
・データ量やインデックス量の増加など環境変化に対して対応できるというメリットがあります
・JOINの順序やINDEXの使用などヒント句により制御できるというメリットがあります
◆コストベースオプティマイザのデメリット
・統計情報により実行計画が変わるため、ある日突然パフォーマンスに影響が出る可能性があります
・統計情報の管理(固定化など)が必要になる可能性があります。これがSPM機能を必要する背景となっています