我有一张桌子,
CREATE TABLE log (
uuid uuid,
time timeuuid,
user text,
....
PRIMARY KEY (uuid, time, user)
)
和
在日志(时间)上创建CUSTOM INDEX time_idx使用'org.apache.cassandra.index.sasi.SASIIndex';
然后我想根据时间选择
从日志中选择*时间> 84bfd880-b001-11e6-918c-24eda6ab1677;
并且没有任何返回,如果我使用相等(=),它将返回。我哪一步出错?
答案 0 :(得分: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)
)