我已经能够将时间序列表的最后一行作为:
SELECT * from myapp.locations WHERE organization_id=1 and user_id=15 and date='2017-2-22' ORDER BY unix_time DESC LIMIT 1;
这很好,但是,我想知道执行ORDER BY
的性能和开销,因为行已经排序了,我只是用它来获取最后一行,在我的情况下它是一个开销吗?
如果我不使用ORDER BY
,我将始终获得表格中的第一行,因此,我可能会以另一种方式使用INSERT
,例如:插入总是在开头而不是表的结尾?
有什么建议吗?我可以使用ORDER BY
而不用担心性能吗?
答案 0 :(得分:1)
只需将您的群集键顺序定义为DESC
即可与以下架构类似:
CREATE TABLE locations (
organization_id int,
user_id int,
date text,
unix_time bigint,
lat double,
long double,
PRIMARY KEY ((organization_id, user_id, date), unix_time)
) WITH CLUSTERING ORDER BY (unix_time DESC);
因此,默认情况下,您的数据将按unix_time desc排序,您无需在查询中指定
现在您可以使用以下查询来获取最后一行:
SELECT * from myapp.locations WHERE organization_id = 1 and user_id = 15 and date = '2017-2-22' LIMIT 1;
答案 1 :(得分:1)
如果该表的查询模式始终为ORDER BY unix_time DESC
,那么您处于逆序时间序列方案中,我可以说您的模型不准确(没错)。
没有理由不通过在表格定义中添加WITH CLUSTERING ORDER BY unix_time DESC
来按相反的顺序对记录进行排序,而在我看来,ORDER BY unix_time DESC
最多只会与某些内容相同对于这些用例(嗯,我认为它会表现更差)。