Есть БД, а в ней таблица с 10 миллионами записей.
Структура таблицы простая - 4 поля (напишу на всякий случай, хотя это не важно).
id - автоинкремент (ключ)
time - число, юникс время (ключ)
ticker - короткая строка, например A (Может тоже сделать ключем т.к. часто идет выборка?)
value - число с плавающей запятой.
Нужно выбирать данные из таблицы (строки) с конца.
Сейчас есть такой запрос.
SELECT `value` FROM `data` WHERE `ticker`='A' ORDER BY `id` DESC LIMIT 1000
Возникает проблема, если в БД нет 1000 строк где ticker=A.
Соответственно MySQL ищет эти строки по всей БД и это долго. Нужно ограничить этот поиск.
Известно что если в последних 200 записях "выше" (DESC ) от места поиска, нет такого тикера, то и записей с такими тикерами больше нет во всей в таблице.
Нашел тикер в 200 записях снизу? Ищи дальше от этого места в следующих 200. Нашел? Дальше от этого места в следующих 200.
Нет? Стоп.
Как корректно ограничить выборку в БД?
Возможно ли тут справится одним sql запросом?
Или всё же нужно писать несколько sql запросов, по алгоритму описанному выше? Запоминать id, отдельным запросом проверять наличие и т.д.