cassandra支持的查询表达式

本文详细介绍了Cassandra支持的查询表达式,包括前缀表达式、不含第一主键的前缀表达式和包含索引列的查询,并强调了使用ALLOW FILTERING可能带来的效率问题。Cassandra查询结果会根据主键的顺序进行排序,有利于进行分页查询。
摘要由CSDN通过智能技术生成

本文介绍cassandra支持的,目前我所知道的所有查询表达式类型。如果你需要更复杂的查询,单单依靠cassandra是很难做到的,你需要借助其它手段或者工具。
cassandra目前支持的表达式目前有三种:
我们先假设我们的表结构是这样的:

 

CREATE TABLE test(
a INT,
b INT,
c INT,
d INT,
e INT,
PRIMARY KEY(a,b,c,d)
);
CREATE INDEX ON test(e);

 1、前缀表达式

 

就是查询条件必须是主键,且前面的主键是=号,只有最后一个主键是> >= < <=。
举例:

 

SELECT * FROM test WHERE a=1 AND b>2;
SELECT * FROM test WHERE a=1 AND b=1 AND c>2;
SELECT * FROM test WHERE a=1 AND b=1 AND c=1 AND d>2;
SELECT * FROM test WHERE a=1 AND b=1 AND c>2 AND c<2;

 以上都是可行的。

 

 

SELECT * FROM test  WHERE a>1;
//不行,第一主键只能用=号
SELECT * FROM test  WHERE a=1 AND c>2; 
//不行 中间不能有跳跃
SELECT * FROM test  WHERE a=1 AND b>2 AND b>=2;
//不行,同一个主键不能同时用> >= = 或者< <= =

 2、不含第一主键的前缀表达式

 

这类表达式,需要加上ALLOW FILTERING来查询,这样的查询效率肯定是低一些

举例:

 

SELECT * FROM test WHERE b>2 ALLOW FILTERING;
SELECT * FROM test WHERE b=1 AND c>2 ALLOW FILTERING;
SELECT * FROM test WHERE b=1 AND c=1 AND d>2 ALLOW FILTERING;
SELECT * FROM test WHERE b=1 AND c>2 AND c<2 ALLOW FILTERING;

 3、包含索引列查询

 

举例:

 

SELECT * FROM test WHERE e=1;
//只含索引
SELECT * FROM test WHERE a=1 AND b=1 AND c>1 AND e=1; 
//包含索引列和前缀表达式的组合
SELECT * FROM test WHERE b=1 AND c>1 AND e=1;
//包含索引列和不含第一主键的前缀表达式的组合 不需要ALLOW FILTERING
SELECT * FROM test WHERE c>1 AND e=1 ALLOW FILTERING;
//除此之外和任意其它表达式的组合,都可以进行查询,
//前提是要加ALLOW FILTERING;

 最后说一下,cassandra查询出来的结果,无论什么查询结果,都是先按token(a)排序,再按b排序 再按c排序,再按d排序:

a  | b | c | d | e
---+---+---+---+---
13 | 2 | 3 | 4 | 5
1  | 2 | 1 | 4 | 5
1  | 2 | 3 | 1 | 5
1  | 2 | 3 | 2 | 5
1  | 2 | 3 | 4 | 5
1  | 2 | 3 | 7 | 5
1  | 2 | 6 | 4 | 5
1  | 3 | 2 | 4 | 5
1  | 4 | 3 | 7 | 5
1  | 7 | 3 | 7 | 5
2  | 2 | 3 | 4 | 5
21 | 2 | 3 | 4 | 5

 这有助你进行分页查询

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值