複数のセカンダリ・インデックスの使用方法。
インデックスは、複数のカラムに作成し、クエリーで使用できます。カーディナリティに関する原則は、インデックスの作成されているすべてのカラムに適用されます。実際には、カラムのカーディナリティに依存するので、特定のカラムは良い選択肢ではないかもしれません。
手順
-
cycling.alt_statsテーブルは、サイクリストに関する統計を含みます。
cqlsh> CREATE TABLE cycling.cyclist_alt_stats ( id UUID PRIMARY KEY, lastname text, birthday timestamp, nationality text, weight text, height text );
-
birthdayとnationalityのカラムにインデックスを作成します。
cqlsh> CREATE INDEX birthday_idx ON cycling.cyclist_alt_stats ( birthday ); CREATE INDEX nationality_idx ON cycling.cyclist_alt_stats ( nationality );
-
すべてのサイクリストをクエリーし、特定の国出身の特定の生年月日のサイクリストを探します。
cqlsh> SELECT * FROM cycling.cyclist_alt_stats WHERE birthday = '1982-01-29' AND nationality = 'Russia';
-
適切な低カーディナリティ・カラムにインデックスが作成されていますが、それでもクエリーは失敗します。その理由は何でしょうか。原因は、定義されていないパーティション・キーにあります。行の範囲を検索するなど潜在的に高負荷のクエリーを実行しようとする場合は、CassandraはALLOW FILTERINGディレクティブを必要とします。エラーは複数のインデックスが原因ではなく、クエリーにパーティション・キーが定義されていないためです。
cqlsh> SELECT * FROM cycling.cyclist_alt_stats WHERE birthday = '1990-05-27' AND nationality = 'Portugal' ALLOW FILTERING