Cassandra特定主键查询中ALLOW FILTERING是否冗余?
Cassandra查询执行分析及ALLOW FILTERING作用判断
查询执行情况
从给定的表结构来看,user表的主键定义为PRIMARY KEY ((p1, p2), user_name):其中(p1, p2)是复合分区键,user_name是聚类列。
你执行的查询语句select * from user where p1 = 1 and p2 = 1 and user_name = 'abc' allow filtering;满足以下关键条件:
- 指定了完整的复合分区键值,Cassandra可以直接定位到对应的单个分区,无需跨分区扫描;
- 同时指定了聚类列的精确匹配值,在目标分区内能够直接定位到唯一的行。
因此这个查询会高效执行,直接返回匹配的单行数据,完全符合Cassandra的主键查询最优路径,没有额外性能开销。
ALLOW FILTERING子句的状态
这里的ALLOW FILTERING是冗余内容,不会生效。ALLOW FILTERING的作用是授权Cassandra在无法通过主键直接定位数据时,执行全表/跨分区的扫描过滤操作。但本次查询已经通过完整分区键+聚类列精确匹配直接定位到目标数据,不需要任何额外的过滤逻辑,有没有这个子句对查询执行没有影响,查询都会正常运行。
内容的提问来源于stack exchange,提问作者Rahul Kumar
相关产品推荐
相关产品推荐

