主键中的所有值都被索引了吗?

时间:2017-09-05 17:24:34

标签: cassandra cassandra-3.0

根据Cassandra的教程,有人提到如果我执行以下操作:

PRIMARY KEY(id, name)该id是分区键,因此它被编入索引。名称是聚类列,因此它也被编入索引。这意味着我可以进行查询,例如:

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

我也可以进行查询,例如:

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

但是,我无法执行以下查询:

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

如果聚类列已编入索引,为什么最后一条语句不起作用?为什么第一个查询工作而不是第二个?

我上次查询的错误如下:

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"

提前致谢!

1 个答案:

答案 0 :(得分:2)

因为它被命名为主键,所以在cassandra中没有索引。 var lyrs; $("div#myID input:checkbox").change(function() { lyrs = $("div#myID input[type='checkbox']:checked").map(function() { return this.id }); console.log('in .change(): ', lyrs) legendFunction( lyrs ); }); function legendFunction( lyrs ) { console.log('in legendFunction: ', lyrs); }; 是您的分区键 - 它定义了cassandra中哪个节点负责您的ìd。聚类列id定义分区内的顺序。

因此name需要扫描所有分区,默认情况下cassandra会拒绝。