複数のインデックスの使用

複数のセカンダリ・インデックスの使用方法。

インデックスは、複数のカラムに対して作成し、クエリーで使用することができます。カーディナリティに関する原則は、インデックスの作成されているすべてのカラムに適用されます。プロダクション環境では、カラムのカーディナリティに応じて、適切でないカラムもある場合があります。

手順

  • cycling.alt_statsテーブルは、サイクリストに関する統計を出力します。
     CREATE TABLE cycling.cyclist_alt_stats ( id UUID PRIMARY KEY, lastname text, birthday timestamp, nationality text, weight text, height text );
  • birthdaynationalityのカラムにインデックスを作成します。
    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