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

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

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

手順

  • 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