データベースにおける「統計情報」とは、オプティマイザー統計情報(Optimizer Statistics)を指し、データベース内のテーブルや列の情報を記述するデータの集合です。
オプティマイザーのコストモデル(Optimizer Cost Model)は、クエリで扱われるテーブル、列、述語などのオブジェクトの統計情報に依存して実行計画を選択します。オプティマイザーは統計情報を利用して計画の選択を最適化できるため、統計情報はコストモデルにおいて最適な実行計画を選択する鍵となります。
OceanBaseデータベースのオプティマイザーでは、統計情報は通常のデータ形式で内部テーブルに格納され、ローカルで統計情報キャッシュを維持することで、オプティマイザーの統計情報へのアクセス速度を向上させます。
統計情報には、テーブル統計情報(Table Level Statistics)と列統計情報(Column Level Statistics)の2種類があります。
テーブルレベル統計情報
テーブルの統計情報には、主に以下の情報が含まれます:
テーブルの基本情報(
tenant_id、table_id、partition_idなどを含む)テーブルの統計情報タイプ(情報レベルは
GLOBAL、PARTITION、SUBPARTITIONに分類される)テーブルの行数
テーブルが占有するマクロブロック数
テーブルが占有するマイクロブロック数
テーブルの平均行長
テーブルの統計情報収集時刻
テーブルの統計情報がロックされているかどうか
列レベル統計情報
列の統計情報には、主に以下の情報が含まれます:
列の基本情報(
tenant_id、table_id、partition_id、column_idを含む)列の統計情報タイプ(情報レベルは
GLOBAL、PARTITION、SUBPARTITIONに分類される)列内の異なる値の数 NDV(Number of Distinct Values)
列内の
NULL値の数列の最大値と最小値
列のサンプリングデータサイズ
列のヒストグラムの密度
列のヒストグラムのバケット数
ヒストグラムタイプ(頻度ヒストグラム / TopKヒストグラム / 混合ヒストグラム)