データベースにおいて、オプティマイザーは入力された各SQLクエリに対して最適な実行計画を生成しようとしますが、そのためにはリアルタイムで正確な統計情報と行数の推定が不可欠です。統計情報とは、実際にはオプティマイザー統計(optimizer statistics)を指し、これはデータベース内のテーブルや列の情報を記述したデータセットであり、コストモデルが最適な実行計画を選択する上で非常に重要な要素です。オプティマイザーのコストモデル(optimizer cost model)は、クエリに関連するテーブル、列、述語などのオブジェクトの統計情報に依存して計画を選択・最適化します。正確かつ有効な統計情報により、オプティマイザーは最適な実行計画を選択できます。
オプティマイザーにおける行数推定とは、文字通り現在のクエリの出力行数を推定することです。正確な行数推定により、オプティマイザーのコストモデルはより正確なコストを計算し、それに基づいて最適な実行計画を選択できます。OceanBaseデータベースのオプティマイザーでは、現在行数推定には2つの方法があります。一つは統計情報に基づいて関連する選択率を計算し、その選択率から行数を推定する方法です。もう一つは、計画生成時に基準テーブルのパスに基づくQUERY RANGEを用いてストレージ層で事前に行数を推定し、リアルタイムで正確な行数を得る方法です。
以上のことから、本記事ではSQLチューニングの観点からOceanBaseデータベースのオプティマイザーの統計情報と行数推定メカニズムについて説明します。