このトピックでは、ApsaraDB for SelectDB の組み込みインテリジェントインデックスと、その使用方法について説明します。
背景情報
インデックスは、データの迅速なフィルタリングまたはクエリに使用されます。 ApsaraDB for SelectDB は、次のタイプのインデックスをサポートしています。
ゾーンマップインデックスとプレフィックスインデックスを含む、組み込みのインテリジェントインデックス。
転置インデックス、ビットマップインデックス、Bloom フィルターインデックス、および NGram Bloom フィルターインデックスを含む、カスタムセカンダリインデックス。詳細については、「転置インデックス」、「ビットマップインデックス」、「Bloom フィルターインデックス」、および「NGram Bloom フィルターインデックス」をご参照ください。
ゾーンマップインデックス
ゾーンマップインデックスは、列指向ストレージ形式の各列に対して自動的に維持されるインデックス情報で、最小値、最大値、および NULL 値の数が含まれます。ゾーンマップインデックスは、ApsaraDB for SelectDB によって自動的に作成および維持されます。
プレフィックスインデックス
ApsaraDB for SelectDB は従来のデータベースとは異なります。ApsaraDB for SelectDB は、超並列処理 (MPP) アーキテクチャを使用して、同時実行性を高めることで大量のデータを処理するオンライン分析処理 (OLAP) データベースです。ApsaraDB for SelectDB は、インデックススキーマと連携してクエリを高速化できます。
ApsaraDB for SelectDB のデータは、ソート済み文字列テーブル (SSTable) に似たデータ構造に格納されます。このデータ構造は、指定された列に基づいてデータをソートおよび格納できる順序付きデータ構造です。このデータ構造では、ソート列に基づいてデータを効率的にクエリできます。
Aggregate、Unique、および Duplicate キーモデルでは、基になるデータストレージは、テーブルの作成に使用される AGGREGATE KEY、UNIQUE KEY、および DUPLICATE KEY 文で指定された列に基づいてデータをソートおよび格納します。プレフィックスインデックスは、データのソート後、指定されたプレフィックス列に基づいてデータをすばやくクエリするために使用されます。
例
次の例では、データ行の最初の 36 バイトをデータ行のプレフィックスインデックスとして使用しています。データが VARCHAR タイプの場合、プレフィックスインデックスは切り捨てられます。例:
次のスキーマのプレフィックスインデックスは、
user_id(8 バイト)+age(4 バイト)+message(プレフィックス 20 バイト)です。列名
タイプ
user_id
BIGINT
age
INT
message
VARCHAR(100)
max_dwell_time
DATETIME
min_dwell_time
DATETIME
プレフィックスインデックスのプレフィックスがクエリ条件として指定されている場合、クエリを高速化できます。次のクエリ文を実行します。
例 1:
SELECT * FROM table WHERE user_id=1829239 and age=20;例 2:
SELECT * FROM table WHERE age=20;例 1 のクエリ速度は、例 2 よりもはるかに高速です。テーブルを作成するときに、列を正しい順序でソートして、クエリ効率を向上させることができます。
次のスキーマのプレフィックスインデックスは、
user_name(20 バイト)です。データが VARCHAR タイプであるため、プレフィックスインデックスには 36 バイトが含まれず、切り捨てられます。列名
タイプ
user_name
VARCHAR(20)
age
INT
message
VARCHAR(100)
max_dwell_time
DATETIME
min_dwell_time
DATETIME
マテリアライズドビューを使用したプレフィックスインデックスの変更
テーブルの列は、テーブルの作成時に指定された順序でソートされます。したがって、テーブルにはプレフィックスインデックスが 1 つだけあります。プレフィックスインデックスにヒットできない列に基づいてデータをクエリする場合、クエリ効率がビジネス要件を満たせない可能性があります。マテリアライズドビューを作成して、列の順序を変更できます。詳細については、「マテリアライズドビュー」をご参照ください。