2017-09-05 20 views
1

Cassandraのチュートリアルに続いて、私が次のことを行うと言われました:プライマリキーのすべての値がインデックスに登録されていますか?

PRIMARY KEY(id, name) idはパーティションキーであり、インデックスされています。名前はクラスタリング列であるため、インデックスも付けられます。しかし、私は次のクエリを実行できません

SELECT * FROM my_table WHERE id = 'id_abc' AND name = 'name_123'; // this works! 

::私には、また、問い合わせを行うことができます

SELECT * FROM my_table WHERE id = 'id_abc'; //this works! 

SELECT * FROM my_table WHERE name = 'name_123'; // this does not work 

なぜこれが私のようなクエリを実行できることを意味しますクラスタリング列が索引付けされている場合、最後の文は機能しませんか?最初のクエリはなぜ機能し、2番目のクエリは機能しないのですか?

私は最後のクエリのために得るエラーは以下の通りです:事前に

InvalidRequest: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING" 

ありがとう!

答えて

2

主キーという名前のため、cassandraにインデックスがありません。 ìdはあなたのパーティションキーです - それはあなたのidを担当するcassandraのノードを定義します。クラスタリング列nameは、パーティション内の順序を定義します。

したがって、SELECT * FROM my_table WHERE name = 'name_123'; // this does not workは、デフォルトではcassandraが拒否するすべてのパーティションをスキャンする必要があります。

関連する問題