1

如果我在 Astra 中有一个这样创建的表:

CREATE TABLE rayven.mytable (
a text,
b text,
c timestamp,
PRIMARY KEY (a, c)
) WITH CLUSTERING ORDER BY (c DESC)

然后我添加了 SAI 索引:

CREATE CUSTOM INDEX b_index ON mytable (b) USING 'StorageAttachedIndex';

当我使用 ORDER BY 查询时:

select * from mytable where b='x' order by c desc;

我懂了

InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported."

由于原始表按“c”降序排列。我是否可以假设上述 SELECT 的结果将按此顺序进行,或者在使用 SAI 索引进行选择时无法知道或控制顺序?

4

1 回答 1

1

为了帮助说明这一点,我创建了您的表并插入了一些数据。然后,我在表中查询了 的值b,并在此示例的分区键中包含了该token函数。

注意:不在 Astra 中运行,而是在我的本地 4.0 rc1 实例上运行。但是,原则保持不变。

基本上,所有结果集都按分区键的哈希标记值排序,然后每个分区内CLUSTERING ORDER优先:

> SELECT a, token(a), c FROM mytable WHERE b='b';

 a  | system.token(a)      | c
----+----------------------+---------------------------------
 a4 | -9170418876698302957 | 2021-05-03 14:38:42.708000+0000
 a5 |  -925545907721365710 | 2021-05-03 14:39:06.849000+0000
 a3 |   -96725737913093993 | 2021-05-03 14:40:30.942000+0000
 a3 |   -96725737913093993 | 2021-05-03 14:39:18.340000+0000
 a2 |  5060052373555595560 | 2021-05-03 14:40:30.938000+0000
 a2 |  5060052373555595560 | 2021-05-03 14:39:14.914000+0000
 a1 |  5693669818594506317 | 2021-05-03 14:38:54.426000+0000
 a1 |  5693669818594506317 | 2021-05-03 14:38:52.758000+0000

(8 rows)

正如您在此处看到的,结果集未完全按 排序c。但最初按 的哈希标记值排序a然后c 每个分区 ( a) 内排序。

所以“不”,您不能指望数据自动完全按c.

于 2021-05-03T14:46:38.077 回答