У меня следующий запрос MySQL:
SELECT value_1, (
SELECT value_4
FROM table_1
WHERE value_3 < value_1
ORDER BY value_3 DESC
LIMIT 1
)
AS result_value
FROM table_2
WHERE value_1 BETWEEN 1325372400000 AND 1328050800000
ORDER BY value_1
, который возвращает 32 результата и занимает 6,6 секунды. Идея состоит в том, чтобы получить записи из таблицы_1, где значение_3 является «ближайшим» к значению_1 в таблице_2.
Два запроса, из которых состоит запрос, а именно
SELECT value_1
AS result_value
FROM table_2
WHERE value_1 BETWEEN 1325372400000 AND 1328050800000
ORDER BY value_1
и (например)
SELECT value_4
FROM table_1
WHERE value_3 < 1328050800000
ORDER BY value_3 DESC
LIMIT 1
каждый занимает 0,03 секунды для запуска. При вычислении суммарного времени для 32 наборов результатов составной запрос должен занимать не более 1 секунды или, возможно, даже меньше (поскольку не учитываются издержки ввода-вывода для отдельных запросов). И все же на 6,6 секунды это занимает гораздо больше времени.
Почему, как я могу его оптимизировать? Или есть другой / превосходный способ достичь моей цели?
Обновление:
Таблица определений:
таблица_1 (MyISAM, 700000 записей):
'id', 'int(10) unsigned', 'NO', 'PRI', NULL, 'auto_increment'
'value_3', 'bigint(20) unsigned', 'NO', 'UNI', '0', ''
'value_4', 'bigint(20) unsigned', 'NO', '', '0', ''
таблица_2 (MyISAM, 4000 записей):
'value_1', 'bigint(20) unsigned', 'NO', 'PRI', NULL, ''
ОБЪЯСНИТЬ [запрос]:
'1', 'PRIMARY', 'table_2', 'range', 'PRIMARY,value_3_UNIQUE', 'PRIMARY', '8', NULL, '32', 'Using where; Using index'
'2', 'DEPENDENT SUBQUERY', 'table_1', 'index', 'value_3,value_3_value_4', 'value_3', '8', NULL, '1', 'Using where'