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