想象一下,我有一张这样的表:
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
对应的某些行。
这一切都正确吗?
答案 0 :(得分:1)
你理解听起来是对的。当然使用像这样的二级索引效率非常低。通常最好设计您的模式,以便任何查询都不需要二级索引。