У меня есть одна простая, но большая таблица.
id_tick INTEGER eg: 1622911
price DOUBLE eg: 1.31723
timestamp DATETIME eg: '2010-04-28 09:34:23'
За 1 месяц данных у меня 2,3 миллиона строк (150 МБ)
Мой запрос направлен на возвращение последней цены позаданное время.
Сначала я настроил таблицу SQLite и использовал запрос:
SELECT max(id_tick), price, timestamp
FROM EURUSD
WHERE timestamp <='2010-04-16 15:22:05'
Он выполняется за 1.6 с.
Как мне нужно выполнить этот запросв течение нескольких тысяч раз 1.6с слишком долго ...
Затем я создал таблицу MySQL и изменил запрос (функция max отличается от MySQL до SQLite):
SELECT id_tick, price, timestamp
FROM EURUSD
WHERE id_tick = (SELECT MAX(id_tick)
FROM EURUSD WHERE timestamp <='2010-04-16 15:22:05')
Время выполнения становится намного хуже 3,6 с (я знаю, что могу избежать подзапроса, используя ORDER BY и LIMIT 1, но это не улучшает время выполнения.)
Я использую только один месяц данных длясейчас, но в какой-то момент мне придется использовать несколько лет.
Тогда у меня следующие вопросы:
- Есть ли способ улучшить мой запрос?
- учитывая большой набор данных, я должен использовать другой механизм базы данных?
- какие-нибудь советы?
Спасибо!