cassandra支持的查询表达式

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

1
2
3
4
5
6
7
8
9
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、前缀表达式
就是查询条件必须是主键,且前面的主键是=号,只有最后一个主键是> >= < <=。
举例:

1
2
3
4
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;

以上都是可行的。

1
2
3
4
5
6
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来查询,这样的查询效率肯定是低一些

举例:

1
2
3
4
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、包含索引列查询

举例:

1
2
3
4
5
6
7
8
9
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排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

这有助你进行分页查询

  1. 微信营销博客说道:

    学习了,博主。

回复 取消

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *