2017-01-25 5 views
0

У меня есть таблица базы данных, которая обновляется каждую секунду. Я хотел бы написать запрос, который вытащил последние 20 000 записей (около 6 часов, так как он собирается каждую секунду).SQL SELECT, чтобы получить последние добавленные записи?

Я думал попробовать:

SELECT time_stamp, column2, column3 
FROM myDB.table1 
limit 20000; 

Но вышеупомянутый запрос тянет элементы с самого начала, когда данные были вставлены в таблицу. Мне бы хотелось получить последние 20000 записей.

Каким будет запрос, чтобы вытащить самые последние записи, вставленные в таблицу?

ответ

2

Правильный запрос:

SELECT time_stamp, column2, column3 
FROM myDB.table1 
ORDER BY time_stamp DESC 
LIMIT 20000; 

Однако, вы можете обнаружить, что запрос является дорогостоящим. Если у вас есть индекс по time_stamp, Вы могли бы найти это более эффективным:

SELECT time_stamp, column2, column3 
FROM myDB.table1 
WHERE time_stamp >= date_sub(now(), interval 6 hours); 

Это не ровно 20 000 записей, но это самые последние записи, и она должна быть быстрее, чем сортировка всех данных.

Вы можете создать такой индекс, выполнив:

create index idx_table1_timestamp on table1(time_stamp); 
+0

Спасибо! Я отдам это. Я посмотрю, сколько времени займет запрос, и если нужно идти по индексу 'time_stamp', тогда я попробую это. Я пытаюсь установить это как повторяющийся запрос, поэтому я не совсем уверен, как я буду корректировать дату каждый день. – Gary

+0

Оба этих запроса, похоже, занимают немного времени для выполнения, когда я использую мой малиновый Pi в качестве клиента MySQL. Существуют ли какие-либо другие методы для ускорения этих записей возврата? – Gary

+1

У вас есть указатель на 'time_stamp'? –

Смежные вопросы