単一のワイドテーブルで、それぞれが異なる列の組み合わせにアクセスする複数のクエリパターンを処理する必要がある場合、単一の検索インデックスではすべてのアクセスパスを効率的にカバーできません。複数の検索インデックスを使用すると、1 つのプライマリテーブルに最大 5 つの独立したインデックスを定義でき、それぞれが異なる列セットをカバーします。Lindorm は、各クエリを最適なインデックスに自動的にルーティングします。
この機能はパブリックプレビュー段階です。有効にするには、DingTalk (グループ ID: s0s3eg3) で Lindorm のテクニカルサポートにご連絡ください。
前提条件
開始する前に、以下を確認してください:
LindormTable エンジンのバージョンが 2.8.2.3 以降であること
Lindorm LTS エンジンのバージョンが 3.8.12.5 以降であること
エンジンバージョンの確認またはアップグレードについては、「マイナーバージョンの更新」をご参照ください。
制限事項
単一のプライマリテーブルでサポートされる検索インデックスは最大 5 つです。
同じプライマリテーブル上のすべての検索インデックスは、一意の名前を持つ必要があります。インデックス名は、同じテーブル上の他のインデックスタイプと競合することはできません。
複数の検索インデックスの作成
以下の手順では、ワイドテーブルを作成し、その上に複数の検索インデックスを構築し、データを書き込み、インデックスを介してクエリを実行する方法を説明します。
ステップ 1: ワイドテーブルの作成
create table testTable (pk int, c1 int, c2 varchar, c3 long, primary key(pk));ステップ 2: テーブルへの複数の検索インデックスの作成
インデックス列とプロパティは、インデックス間で重複させることができます。
create index idx1 using search on testTable (c1,c2);
create index idx2 using search on testTable (c3);
create index idx3 using search on testTable (c1,c2,c3);ステップ 3: データの書き込み
ワイドテーブルに行をアップサートします。データはすべての検索インデックスに自動的に同期されます。
upsert into testTable(pk,c1,c2,c3) values (1,1,'1',1);
upsert into testTable(pk,c1,c2,c3) values (2,2,'2',2);
upsert into testTable(pk,c1,c2,c3) values (3,3,'3',3);
upsert into testTable(pk,c1,c2,c3) values (4,4,'4',4);ステップ 4: データのクエリ
Lindorm は、クエリ列に基づいて適切な検索インデックスを自動的に選択します。複数のインデックスが同じクエリをカバーする場合、そのうちの 1 つが選択されます。
3 つすべての列をクエリする — idx3 は c1、c2、c3 をカバーしているため選択されます:
select * from testTable where c1>0 and c2>'0' and c3>0;2 つの列をクエリする — c1 と c2 の両方をカバーしているため、idx1 または idx3 が選択されます:
select * from testTable where c1>0 and c2>'0';1 つの列をクエリする — c3 をカバーしているため、idx2 または idx3 が選択されます:
select * from testTable where c3>0;ステップ 5: インデックスの明示的な指定 (任意)
クエリに対して特定のインデックスを強制するために、HINT 構文 を使用します。これにより、自動選択が上書きされます:
select /*+ _l_force_index_('idx1') */ * from testTable where c1>0 and c2>'0';ステップ 6: インデックスステータスの管理
ALTER INDEX を使用して、各インデックスのステータスを個別に制御します:
alter index idx1 on testTable inactive;
alter index idx1 on testTable disabled;次の表に、各ステータス値と、それがクエリとインデックス作成に与える影響について説明します:
| ステータス | クエリ可能 | データインデックス作成 | 注意事項 |
|---|---|---|---|
| ACTIVE | はい | はい | デフォルトの動作状態です。 |
| INACTIVE | いいえ | はい | クエリに対しては一時停止しますが、書き込みのインデックス作成は継続します。 |
| DISABLED | いいえ | いいえ | 書き込みのインデックス作成を停止します。他のステータスに変更することはできません。インデックスを再度有効にするには、REBUILD コマンドを実行する必要があります。 |