コレクションのインデックス作成

特定の値を含むコレクションを検出するためにコレクションのインデックスを作成し、データベースのクエリーを実行する方法。

特定の値を含むコレクションを検出するには、コレクションのインデックスを作成し、クエリーを実行します。setlistのインデックスの作成方法は、mapと多少異なります。これは、mapのキーと値の性質が異なるためです。

setlistは、コレクション・カラムのインデックスを作成することで検出されたすべての値のインデックスを作成できます。mapは、以下に示す方法を使用して、マップ・キー、マップ値またはマップ・エントリーのインデックスを作成できます。1つのテーブルの同じマップ・カラムに対して複数のインデックスを作成できるので、マップのキー、値またはエントリーに対してクエリーを実行できます。また、FULLを使用してfrozenコレクションのインデックスを作成し、frozenコレクションのコンテンツ全体のインデックスを作成することもできます。
注: セカンダリ・インデックスの使用に関するすべての注意事項は、コレクションのインデックスの作成にも適用されます。

手順

  • setおよびlistコレクションで、カラム名のインデックスを作成します。setのインデックスを作成し、特定のチームに属しているすべてのサイクリストを検出します。
    CREATE INDEX team_idx ON cycling.cyclist_career_teams ( teams );
    SELECT * FROM cycling.cyclist_career_teams WHERE teams CONTAINS 'Nederland bloeit';


  • mapコレクションで、マップ・キー、マップ値またはマップ・エントリーのインデックスを作成します。map keyのインデックスを作成し、特定の年のサイクリストとチームの組み合わせをすべて検出します。
    CREATE INDEX team_year_idx ON cycling.cyclist_teams ( KEYS (teams) );
    SELECT * From cycling.cyclist_teams WHERE teams CONTAINS KEY 2015;
  • マップ・エントリーのインデックスを作成し、年齢が同じサイクリストを検出します。ENTRIESを使用したインデックスは、mapに対してのみ有効です。
    CREATE TABLE cycling.birthday_list (cyclist_name text PRIMARY KEY, blist map<text,text>);
    CREATE INDEX blist_idx ON cycling.birthday_list (ENTRIES(blist));
    SELECT * FROM cycling.birthday_list WHERE blist['age'] = '23';
  • 同じインデックスを使用して、同じ出身国のサイクリストを検出します。
    SELECT * FROM cyclist.birthday_list WHERE blist['nation'] = 'NETHERLANDS';
  • マップ値のインデックスを作成し、指定したマップ内で検出された特定の値を持つサイクリストを検出します。VALUESを使用したインデックスは、mapに対してのみ有効です。
    CREATE TABLE cycling.birthday_list (cyclist_name text PRIMARY KEY, blist
          map<text,text>;
    );CREATE INDEX blist_idx ON cycling.birthday_list (VALUES(blist));
    SELECT * FROM cycling.birthday_list CONTAINS 'NETHERLANDS';
  • FROZEN mapのコンテンツ全体のインデックスを作成します。この例のテーブルは、サイクリストのプロ優勝の数、出場したグランド・ツアー・レースおよびクラシック・レースの数を格納します。SELECT文は、39回のプロ優勝、7回のグランド・ツアー出場、および14回のクラシック出場の記録を持つサイクリストを検出します。
    CREATE TABLE cycling.race_starts (cyclist_name text PRIMARY KEY, rnumbers FROZEN<LIST<int>>);
    CREATE INDEX rnumbers_idx ON cycling.race_starts (FULL(rnumbers));
    SELECT * FROM cycling.race_starts WHERE rnumbers = [39,7,14];