テーブルインデックス設計の最適化
概要
Dorisは現在2つのタイプのインデックスをサポートしています:
- 組み込みインデックス:これらにはプレフィックスインデックス、ZoneMapインデックスなどが含まれます。
- セカンダリインデックス:これらには転置インデックス、Bloomフィルターインデックス、N-Gram Bloomフィルターインデックス、およびBitmapインデックスなどが含まれます。
ビジネス最適化のプロセスにおいて、ビジネス特性を十分に分析し、インデックスを効果的に活用することで、クエリと分析の有効性を大幅に向上させ、それによりパフォーマンスチューニングの目的を達成することができます。
各種インデックスの詳細な紹介については、Table Indexセクションを参照してください。この章では、実際のケースの観点からいくつかの典型的なシナリオでのインデックス使用テクニックを実演し、ビジネスチューニングでの参考のために最適化の提案をまとめます。
ケース1:プレフィックスインデックスを活用してクエリを高速化するためのキーカラムの順序の最適化
テーブルスキーマ設計の最適化では、適切なフィールドをキーフィールドとして選択し、Dorisのキーカラムソート機能を活用してクエリを高速化する方法を紹介しました。このケースでは、このシナリオをさらに展開します。
Dorisの組み込みプレフィックスインデックス機能により、テーブル作成時にテーブルのKeyの最初の36バイトを自動的にプレフィックスインデックスとして使用します。クエリ条件がプレフィックスインデックスのプレフィックスと一致する場合、クエリを大幅に高速化できます。以下はテーブル定義の例です:
CREATE TABLE `t1` (
`c1` VARCHAR(10) NULL,
`c2` VARCHAR(10) NULL
) ENGINE=OLAP
DUPLICATE KEY(`c1`)
DISTRIBUTED BY HASH(`c2`) BUCKETS 10
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
対応するビジネスSQLパターンは以下の通りです:
select * from t1 where t1.c2 = '1';
select * from t1 where t1.c2 in ('1', '2', '3');
上記のスキーマ定義では、c1がc2よりも前に配置されています。しかし、クエリではフィルタリングにc2フィールドを使用しています。この場合、プレフィックスインデックスの高速化機能を利用することができません。最適化するために、c1とc2の定義順序を調整し、c2列を最初のフィールド位置に配置することで、プレフィックスインデックスの高速化機能を活用できます。
調整後のスキーマは以下の通りです:
CREATE TABLE `t1` (
`c2` VARCHAR(10) NULL,
`c1` VARCHAR(10) NULL
) ENGINE=OLAP
DUPLICATE KEY(`c2`)
DISTRIBUTED BY HASH(`c1`) BUCKETS 10
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
スキーマのカラム順序を定義する際は、ビジネスクエリのフィルタリングで高頻度かつ高優先度のカラムを参照し、Dorisのprefix indexアクセラレーション機能を最大限に活用してください。
ケース2:Inverted Indexを使用したクエリの高速化
Dorisは、テキスト型の等価値、範囲、および全文検索などのビジネスシナリオを高速化するために、secondary indexとしてinverted indexをサポートしています。Inverted indexの作成と管理は独立しており、元のテーブルスキーマに影響を与えることなく、テーブルデータの再インポートを必要とせずに、便利にビジネスパフォーマンスを最適化できます。
典型的な使用シナリオ、構文、およびケースについては、Table Index - Inverted Indexセクションで詳細な説明を参照してください。そのため、この章では説明を繰り返しません。
テキスト型の全文検索や、string、numeric、datetime型フィールドの等価値または範囲クエリには、inverted indexを活用してクエリを高速化できます。特に、元のテーブル構造とキー定義の最適化が困難な場合や、テーブルデータの再インポートコストが高い場合などの特定の状況では、inverted indexはビジネス実行パフォーマンスを最適化するための柔軟なアクセラレーションソリューションを提供します。
まとめ
スキーマチューニングにおいて、テーブルレベルのスキーマ最適化とは別に、インデックス最適化も重要な位置を占めています。Dorisは、prefix indexなどの組み込みインデックスや、inverted indexなどのsecondary indexを含む複数のインデックス型を提供し、パフォーマンス高速化に強力なサポートを提供します。これらのインデックスを合理的に活用することで、複数のシナリオでビジネスクエリと分析の速度を大幅に向上させることができ、マルチシナリオのビジネスクエリと分析にとって非常に重要な意味を持ちます。