0
想象我有这样的一个表:索引卡桑德拉查询
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
一些行会被退回。
这一切是否正确?
您的第一个查询无效。您始终必须提供分区键的所有列。 – Ralf
它确实有效,因为'parameter'是一个索引并且因为允许过滤。除了潜在的错字以外,问题中的所有内容都适用,我只想确认我明白为什么以及如何。 –
啊,对。我对它的工作原理与你的一样。但我的CQL体验有限...... – Ralf