0

我在 Cassandra 2.0.8 中有一张如下表:

CREATE TABLE emp (empid int, deptid int, first_name text, last_name text, PRIMARY KEY (empid, deptid) )

当我尝试通过以下方式搜索时:“select * from emp where first_name='John';”

cql shell 说:
“错误请求:使用 Equal 运算符的 by-columns 子句中没有索引列”

我搜索了这个问题,它说的每个地方都为“first_name”列添加了一个二级索引。

但我需要知道为什么需要索引该列的确切原因?我唯一能弄清楚的是性能。还有其他原因吗?

4

1 回答 1

1

Cassandra 不支持按任意列搜索。这是因为它会涉及扫描所有行,这是不受支持的。

数据在内部被组织成可以与 HashMap[X, SortedMap[Y, Z]] 比较的东西。外部映射的键是一个分区键值,内部映射的键是所有聚类列值和某个常规列的名称的一种串联。

除非您在列上有索引,否则您需要提供要通过查询收集的数据的完整(首选)或部分路径。因此,您应该设计您的架构,以便查询包含主键值和集群列的某些范围。

您可以阅读关于什么是允许的,什么是不在这里的

于 2014-07-04T05:02:21.607 回答