У меня есть огромная таблица (400 тыс. + Строк), где каждая строка описывает событие на рынке Форекс. Первичным ключом таблицы является целое число с именем «pTime» - это время, когда событие произошло в POSIX время.
Моя база данных неоднократно запрашивается моим компьютером во время симуляции, которую я постоянно запускаю. Во время этой симуляции я передаю входную pTime (я называю это qTime) процедуре MySQL. qTime - это точка запроса из той же огромной таблицы. Используя qTime, моя процедура фильтрует таблицу в соответствии со следующим правилом:
Выберите только те строки, чье время pTime составляет максимум 2 часа от входного qTime в любой день.
ех.
query point: `2001-01-01 07:00`
lower limit: `ANY-ANY-ANY 05:00`
upper limit: `ANY-ANY-ANY 09:00`
После этого запроса точка запроса сместится на 1 строку (5 минут), и будет инициирован новый запрос:
query point: `2001-01-01 07:05`
lower limit: `ANY-ANY-ANY 05:05`
upper limit: `ANY-ANY-ANY 09:05`
Вот как я этого добиваюсь:
SELECT * FROM mergetbl WHERE
TIME_TO_SEC(TIMEDIFF(FROM_UNIXTIME(pTime,"%H:%i"),FROM_UNIXTIME(qTime,"%H:%i")))/3600
BETWEEN -2 AND 2
Хотя у меня есть индекс на pTime, этот фрагмент кода значительно замедляет мое программное обеспечение.
Я хотел бы предварительно обработать этот оператор для каждого значения pTime (которое позже будет служить входом qTime), но я не могу найти способ сделать это.