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