我已经能够获取最后一行的时间序列表作为:
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
吗?
喜欢以下模式:
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;
如果您对该表的查询模式始终是ORDER BY unix_time DESC
,那么您处于反向订购时间序列方案,我可以说您的模型是不准确(没错)。
没有理由不通过在表定义中添加WITH CLUSTERING ORDER BY unix_time DESC
来以相反顺序对记录进行排序,我认为ORDER BY unix_time DESC
最多会与这些用例明确指出的内容(我认为,我认为它将是明确的表现更糟)。