メインコンテンツまでスキップ
バージョン: 3.2

インデックス

インデックスは、特定のクエリ条件に一致するデータを迅速に見つけるのに役立ちます。具体的には、テーブルのいくつかのカラムに基づいてインデックスが構築されると、これらのカラムをクエリ条件として使用するクエリは、条件に一致するデータを見つけるためにテーブルデータの一部のみをスキャンする必要があります。このようにして、クエリの効率が向上します。StarRocks はさまざまな種類のインデックスを提供しており、主に次の2つのカテゴリに分かれます。

  • StarRocks は、Prefix インデックス、Ordinal インデックス、ZoneMap インデックスを含む、システムによって自動的に作成される組み込みインデックスを提供します。
  • StarRocks はまた、ユーザーが手動でインデックスを作成することも許可しており、Bitmap インデックスや Bloom filter インデックスが含まれます。

組み込みインデックス

Prefix indexes

Prefix インデックスはデータ書き込み時に自動的に生成されます。具体的には、データが StarRocks に書き込まれるとき、指定されたソートキーに従ってデータがソートされ、1024 行ごとに1つの論理データブロックに含まれます。その論理データブロックの最初のデータ行のソートキーの値からなるインデックスエントリが Prefix インデックステーブルに追加されます。クエリのフィルタリング条件が Prefix インデックスのプレフィックスに一致すると、Prefix インデックスは条件に一致するデータを迅速に見つけ、スキャンするデータ量を減らすことができ、クエリパフォーマンスを大幅に向上させます。

Ordinal indexes

StarRocks は実際には基盤となるストレージで列指向(カラムナ)ストレージを採用しています。各カラムのデータはデータページに保存され、各データページのサイズは通常 64 * 1024 バイトです(data_page_size = 64 * 1024)。データページが生成されると同時に Ordinal インデックスエントリが追加されます。Ordinal インデックスエントリには、データページの開始行番号などの情報が含まれています。このようにして、Ordinal インデックスは行番号を使用してカラムデータページの物理アドレスを見つけることができます。

img

ZoneMap indexes

ZoneMap インデックスは、各データチャンクの統計情報を格納します。これには、Min(最大値)、Max(最小値)、HasNull(null 値の存在)、HasNotNull(非 null 値の存在)情報が含まれます。クエリ中に、StarRocks はこれらのデータチャンクが統計に基づいてフィルタリング可能かどうかを迅速に評価し、スキャンするデータ量を減らし、クエリ速度を向上させます。

詳細情報

各データチャンクはセグメントまたはカラムのデータページである可能性があります。したがって、2 種類の ZoneMap インデックスが存在します。1 つは各セグメントの統計を格納し、もう 1 つはカラムの各データページの統計を格納します。

手動で作成されたインデックス

クエリ条件のカラムがプレフィックスフィールドでない場合、データとクエリの特性に基づいてこのカラムにインデックスを手動で作成し、クエリ効率を向上させることができます。

Bitmap indexes

ビットマップインデックスは、高基数カラムまたは複数の低基数カラムの組み合わせに対するクエリに適しています。ビットマップインデックスは、これらのクエリに対して理想的なフィルタリングパフォーマンスを示し、1000 行中少なくとも 999 行をフィルタリングします。

Bloom filter indexes

ブルームフィルターインデックスは、ID カラムのような比較的高基数のカラムに適していますが、一定の誤判定率が発生する可能性があります。