2017-02-16 3 views
1

Предполагая, что у нас есть только таблица с добавлением [1], в которой каждая строка помечена своей меткой фиксации, а обновления - это ВСТАВКИ новой строки с тем же идентификатором, но новая временная метка, есть ли какие-то хорошие способы получения для данного идентификатора последней строки с этим идентификатором? Как выглядит запрос SQL [2]?Эффективное получение последней строки в таблице только для добавления

1: Пример определения таблицы:

CREATE TABLE AppendOnlyTable (
    ID INT64 NOT NULL, 
    Timestamp INT64 NOT NULL 
) PRIMARY KEY (ID, Timestamp); 

ответ

1

Если у вас есть таблица для вашей истории, которая заклиненную на метку времени, сделать ключ по убыванию временной метки, добавив ключевое слово DESC. Это делает чтение всей вашей истории до X-давно более эффективным, так как Spanner не нужно будет сканировать все ваши данные, чтобы узнать, где X-давно начал, но может только начать читать «вверху».

Например:

CREATE TABLE AppendOnlyTable (
    ID INT64 NOT NULL, 
    Timestamp INT64 NOT NULL 
) PRIMARY KEY (ID, Timestamp DESC); 

SQL-запрос для выборки последней строки:

SELECT * From AppendOnlyTable WHERE UserId=12345 ORDER BY Timestamp DESC LIMIT 1; 
Смежные вопросы