cassandra的索引查詢和排序

2021-07-02 07:37:42 字數 2554 閱讀 5489

**:

cassandra的索引查詢和排序

cassandra的查詢雖然很弱,但是它也是支援索引和排序的,當然是簡陋的查詢,這一切都是為了追求效能的代價,所以要使用cassandra,你不能希望它完全適用你的邏輯,而是把你的邏輯設計的更適合cassandra。

第一:索引查詢

cassandra是支援建立二級索引的,索引可以建立在除了第乙個主鍵之外所有的列上,當然有些型別除外,例如集合型別。

例如

123

4567

891011

create

table test(

a int

, b int

, c int

, d int

, e int

, m int

,primary

key(a,b,c)); 

create

index

on test(c);

create

index

on test(e);

在第一主鍵a上建立索引是不可以的:

1
create

index

on test(a) x

索引列只可以用=號查詢,所以

1

2

select

*from test where e=

1; //是可以

select

*from test where e>

1; //就不行了。

如果你的查詢條件裡,有乙個是根據索引查詢,那其它非索引非主鍵字段,可以通過加乙個allow filtering來過濾實現、

例如:

1
select

*from test where e=

1and m>

2 allow filtering;

雖然m欄位是非索引非主鍵字段,但是只要加了allow filtering條件,它會先根據e=1查出來,再對結果進行m>2過濾

第二:排序

cassandra也是支援排序的,order by。 當然它的排序也是有條件的,

第一:必須有第一主鍵的=號查詢。cassandra的第一主鍵是決定記錄分布在哪台機器上,也就是說cassandra只支援單台機器上的記錄排序。

第二:那就是只能根據第

二、三、四…主鍵進行有序的,相同的排序。

第三:不能有索引查詢

123

4

select

*from test where a=

1order

by b desc;

select

*from test where a=

1order

by b desc

, c desc;

select

*from test where a=

1order

by b asc;

select

*from test where a=

1order

by b asc

, c asc;

以上都是可以的。

123

4

select

*from test order

by b desc; //沒有第一主鍵 不行

select

*from test where a=

1order

by c desc; //必須以第二主鍵開始排序

select

*from test where a=

1order

by b desc

, c asc; //不是相同的排序。

select

*from test where e=

1order

by b desc; //不能有索引。

其實cassandra的任何查詢,最後的結果都是有序的,預設的是b asc, c asc,因為它內部就是這樣儲存的。

這個我在《cassandra2.0 如何實現分頁查詢》文章中提到過。所以你使用b desc, c asc 或者b asc,c desc 去排序,cassandra是比較為難的。

當然這個預設儲存排序方式,是可以在建表的時候指定的。

123

4567

89

create

table test(

a int

, b int

, c int

, d int

, e int

, m int

,primary

key(a,b,c)

)with clustering order

by(b desc

, c asc

);

cassandra的索引查詢和排序

cassandra的索引查詢和排序 cassandra的查詢雖然很弱,但是它也是支援索引和排序的,當然是簡陋的查詢,這一切都是為了追求效能的代價,所以要使用cassandra,你不能希望它完全適用你的邏輯,而是把你的邏輯設計的更適合cassandra。第一 索引查詢 cassandra是支援建立二級...

反轉Cassandra索引

通過前面的文章 談談cassandra的客戶端 和 大話cassandra資料模型 我們已經了解了cassandra的資料模型和程式設計介面的情況。假如我們在實際的應用中我們的資料是這樣儲存的 每乙個key對應了一些列的column port,version,service,status等等。通過某...

Cassandra下的Rang查詢

1 第乙個key不能使用range,只能用in 或者等於 2 一般的,在對後面的key做range查詢,這個key前面的key,必須用等於限定,否則效率非常低。比如 primary key user id int logtime int select from userlog where logti...