带索引的Cassandra查询

时间:2016-01-09 14:09:04

标签: cassandra

想象一下,我有一张这样的表:

CREATE TABLE test(
  name  TEXT,
  tag   TEXT,
  id    UUID,
  parameter INT,
  PRIMARY KEY((name, tag, id), parameter)
);

和索引

CREATE INDEX parameter_idx on test(parameter);

使用如下查询:

SELECT * FROM test WHERE name = 'name' 
                     AND tag = 'tag' 
                     AND parameter = value;

使用索引 是否正确,返回多个分区,然后将过滤这些分区,因此需要ALLOW FILTERING

相反,像这样的查询:

SELECT * FROM test WHERE name = 'name' 
                     AND tag = 'tag' 
                     AND id = some_id,
                     AND parameter = value;

将不使用索引,将找到单个分区,并且只返回与parameter = value对应的某些行。

这一切都正确吗?

1 个答案:

答案 0 :(得分:1)

你理解听起来是对的。当然使用像这样的二级索引效率非常低。通常最好设计您的模式,以便任何查询都不需要二级索引。