0

我有一张桌子,

CREATE TABLE log (
    uuid uuid,
    time timeuuid,
    user text,
    ....
    PRIMARY KEY (uuid, time, user)
)  

使用'org.apache.cassandra.index.sasi.SASIIndex'在日志(时间)上创建自定义索引time_idx;

然后我想按时间选择

select * from Log where time > 84bfd880-b001-11e6-918c-24eda6ab1677;

没有任何返回,如果我使用 equal(=),它将返回。我走错了哪一步?

4

1 回答 1

0

您需要将 time_idx 索引设为 SPARSE 索引。

SPARSE 索引旨在提高查询大而密集的数字范围的性能,例如每毫秒插入的数据的时间戳。如果数据是数字的,具有少量分区键的数百万列值表征数据,并且将对索引执行范围查询,那么 SPARSE 是最佳选择。对于不符合此标准的数值数据,PREFIX 是最佳选择。

删除 time_idx 并使用以下查询创建

CREATE CUSTOM INDEX time_idx on Log(time) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'SPARSE' };

现在您可以使用不等式 >=、> 和 <= 进行查询。

限制:SPARSE 索引仅用于数字数据,因此 LIKE 查询不适用。

另一件事是您的表格创建不正确。它应该是

CREATE TABLE log (
    uuid uuid,
    time timeuuid,
    user text,
    PRIMARY KEY (uuid, time, user)
) 
于 2016-11-21T08:23:47.320 回答