Scylla DB 为二级索引实现了所谓的“键前缀优化”,如果指定了主键的一部分,它将消除过滤。例如,可以SELECT * FROM A WHERE a = 'a' AND b = 'a' AND d = 'a';
在 table上执行A
。
CREATE TABLE A (
a text,
b text,
c text,
d text,
PRIMARY KEY(a,b,c)
);
CREATE INDEX A_index ON A (d);
A.d
但如果是一个聚类列,它就不起作用。例如如下表B
。
CREATE TABLE B (
a text,
b text,
c text,
d text,
PRIMARY KEY(a,b,c,d)
);
CREATE INDEX B_index ON B (d);
上面的 SELECT 查询失败并出现错误:
InvalidRequest: Error from server: code=2200 [Invalid query] message="无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预测的性能。如果您想在性能不可预测的情况下执行此查询,请使用 ALLOW FILTERING"
ScyllaDB 3.0.1。