1an index(旧名:secondary index)は、パーティションキー以外の非主キーフィールドを使用してCassandra内のデータにアクセスする手段を提供します。 利点は、指定された条件に一致するデータの高速で効率的な検索です。 実際には、通常の列に索引がない場合、その列で条件付きで照会することさえできません。
索引は、索引付けされている値を含む別の非表示の列ファミリ(表)に列値を索引付けします。 インデックスのデータはローカルのみであるため、他のノードにはレプリケートされません。 これはまた、インデックス付き列によるデータクエリの場合、要求はすべてのノードに転送され、すべての共鳴を待ってから結果がマージされて返されるこ したがって、多くのノードがある場合、クラスターに追加されるマシンが増えるにつれて、クエリ応答が遅くなります。注意:Apache Cassandraの現在のバージョン(2.0.7)では、等価比較条件を持つインデックス付き列でのみ照会できます。 インデックス付き列による範囲選択またはorder-byはサポートされていません。 その理由は、非表示の列ファミリに格納されているキーがソートされていないためです。
インデックスを使用する場合はどうすればよいですか?
2casandraの組み込みインデックスは、インデックス付きの値を含む多くの行を持つテーブルに最適です。 特定の列に存在する一意の値が多ければ多いほど、インデックスのクエリと維持にかかるオーバーヘッドが大きくなります。 たとえば、10億曲の再生リストテーブルがあり、アーティストの曲を検索したいとします。 多くの曲は、アーティストのための同じ列の値を共有します。 アーティストの列は、インデックスの良い候補です。
インデックスを使用しない場合は?
2次のような状況ではインデックスを使用しないでください。
- 高カーディナリティ列に対して
- カウンター列を使用するテーブルで
- 頻繁に更新または削除された列に対して
- を使用して、大規模なパーティション内の行を検索するために、狭いクエリを行わない限り