2017-02-22 33 views
1

Я уже в состоянии получить последнюю строку таблицы временных рядов, как:Получить последнюю строку в таблице временных рядов?

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

показать нам свою схему таблицы –

+0

здесь: https://gist.github.com/hopewise/04f0310629151408f9f019e8d4046546 – simo

ответ

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 по алфавиту, вам не нужно указать в запросе
Теперь вы можете просто использовать приведенный ниже запрос, чтобы получить последнюю строку:

SELECT * from myapp.locations WHERE organization_id = 1 and user_id = 15 and date = '2017-2-22' LIMIT 1; 
1

Если ваш шаблон запроса для этой таблицы всегда ORDER BY unix_time DESC, то вы находитесь в сценарии обратного порядка, и я могу сказать, что ваша модель неточна (не ошибается).

Нет причин не сортировать записи в обратном порядке, добавив в таблицу определения WITH CLUSTERING ORDER BY unix_time DESC, и, по моему мнению, ORDER BY unix_time DESC будет выполнять не более, чем что-то явно предназначенное для этих случаев использования (ну, я думаю, это будет хуже).

+0

'хорошо, я думаю, что он будет выполнять worse' вы имеете в виду, что' С КЛАСТЕРИЗАЦИЕЙ ORDER BY unix_time DESC' будет плохо влияние на производительность? – simo

+0

@simo: нет, я имел в виду, что запрос с 'ORDER BY unix_time DESC' будет работать хуже, чем таблица с' WITH CLUSTERING ORDER BY unix_time DESC'. По дизайну. – xmas79

+0

ах, спасибо! я понял – simo