Cassandraドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

インデックスを使用する場合

組み込みインデックスは、インデックス付きの値を含む行が多数あるテーブルに最適です。特定の列に存在する一意の値が多いほど、インデックスのクエリと維持に必要な平均オーバーヘッドが増加します。たとえば、数百のレースに参加したサイクリストのレーステーブルに10億のエントリがあり、サイクリスト別に順位を調べたいとします。多くのサイクリストの順位は、レース年で同じ列の値を共有します。 `race_year`列は、インデックスの適切な候補です。

パーティションキー以外の1つ以上のテーブル列に基づいてセカンダリインデックスが必要な場合は、ストレージ接続インデックス(SAI)を使用します。詳細については、CREATE CUSTOM INDEXを参照してください。

インデックスを使用*しない* 場合

以下の状況ではインデックスを使用しないでください

カーディナリティの高い列インデックスを使用する場合の問題点

多数の個別値を持つカーディナリティの高い列にインデックスを作成すると、フィールド間のクエリでは、非常に少ない結果に対して多数のシークが発生します。10億曲のテーブルでは、レコーディングアーティストではなくライター(通常、各曲に一意の値)で曲を検索すると、非常に非効率的になる可能性があります。

組み込みインデックスを使用する代わりに、インデックスの形式としてテーブルを手動で維持する方が効率的な場合があります。一意のデータを含む列の場合、インデックス付きの列を持つテーブルへのクエリ量が適度で、一定の負荷がかかっていない限り、利便性のためにインデックスを使用する方がパフォーマンスが向上する場合があります。

逆に、ブール列などのカーディナリティが非常に低い列にインデックスを作成することは意味がありません。インデックス内の各値はインデックス内の単一の行になり、たとえば、すべてのfalse値に対して巨大な行が生成されます。foo = trueとfoo = falseを持つ多数のインデックス付き列にインデックスを付けることは役に立ちません。

頻繁に更新または削除される列にインデックスを使用する場合の問題点

データベースは、トゥームストーンの制限が100Kセルに達するまで、インデックスにトゥームストーンを格納します。トゥームストーンの制限を超えると、インデックス付きの値を使用するクエリは失敗します。

絞り込まれたクエリでない限り、大きなパーティション内の行を検索するためにインデックスを使用する場合の問題点

大きなクラスターのインデックス付き列に対するクエリでは、通常、複数のデータパーティションからの応答を照合する必要があります。クラスターにマシンを追加するほど、クエリ応答の速度が低下します。大きなパーティション内の行を検索する場合は、クエリのパフォーマンス低下を避けるために検索範囲を絞り込んでください。