如果一个Cassandra表中的列有索引,那么可以使用SELECT DISTINCT
操作来查找该列的所有唯一值吗?
我的问题并不仅仅是询问如何查找非主键列的唯一值。我知道Cassandra不允许需要表扫描的查询,因为它们效率低下;在这里,索引的存在消除了对表扫描的需求。
如果我有一个这样的表:
CREATE TABLE thing (
id uuid,
version bigint,
name text,
... data columns ...
PRIMARY KEY ((id),version)
);
CREATE INDEX ON thing(name);
我可以使用
SELECT DISTINCT id FROM thing;
来获取所有thing ID。这需要从我的集群中的每个节点获得一个响应,每个响应返回其节点的键。但是我能否使用
SELECT DISTINCT name FROM thing;
来获取所有thing名称?这也应该只需要从我的集群中的每个节点获得一个响应,每个响应仅通过检查其节点上的索引部分来构建。如果name
是一个好的列用于索引,每个响应将比主键查询更小(名称应该比分区键少)。