У меня проблемы с оптимизацией этого оператора SQL в MySQL.У меня есть две таблицы, которые заполняются независимо, поэтому время, зарегистрированное в столбце каждой таблицы, не будет одинаковым.Что мне нужно, так это отдельная таблица (представление), в которой перечислены все записи в sensor_history с информацией о текущем процессе, которая присутствовала во время измерения датчика.Если время журнала процесса отсутствовало, я могу жить с NULL в полях процесса в результирующем представлении для этой конкретной записи.
То, что у меня есть, работает, но это грубая сила и, к сожалению, неэффективно.В таблице sensor_history содержится около 500 тыс. Записей и около 20 тыс. Записей в таблице process_history.Я пытался разобраться в различных методах соединения, но у меня возникли проблемы с синтаксисом или плохие результаты.Я безуспешно пробовал некоторые онлайн-оптимизаторы, и я надеюсь, что кто-то здесь может направить меня в правильном направлении.
Для простоты я удалил связи внешнего ключа с другими таблицами.Нет никаких используемых индексов, но не стесняйтесь предлагать любые, которые могут помочь.Вот основы:
CREATE TABLE `sensor_history` (
`measurement_time_utc` int(11) NOT NULL,
`sensor_id` int(11) NOT NULL,
`sensor_measurement_x` double NOT NULL,
`sensor_measurement_y` double NOT NULL,
`sensor_measurement_z` double NOT NULL,
`sensor_quality` int(11) NOT NULL
);
CREATE TABLE `process_history` (
`log_time_utc` int(11) NOT NULL,
`process_id` int(11) NOT NULL,
`process_speed` double NOT NULL,
`process_load` int(11) NOT NULL
);
CREATE VIEW `rollup` AS SELECT
`sensor_history`.`measurement_time_utc`,
`sensor_history`.`sensor_id`,
`sensor_history`.`sensor_measurement_x`,
`sensor_history`.`sensor_measurement_y`,
`sensor_history`.`sensor_measurement_z`,
`sensor_history`.`sensor_quality`,
(SELECT `process_history`.`process_id` FROM `process_history` WHERE `sensor_history`.`measurement_time_utc`>=`process_history`.`log_time_utc` ORDER BY `process_history`.`log_time_utc` DESC LIMIT 1) AS `process_id`,
(SELECT `process_history`.`process_speed` FROM `process_history` WHERE `sensor_history`.`measurement_time_utc`>=`process_history`.`log_time_utc` ORDER BY `process_history`.`log_time_utc` DESC LIMIT 1) AS `process_speed`,
(SELECT `process_history`.`process_load` FROM `process_history` WHERE `sensor_history`.`measurement_time_utc`>=`process_history`.`log_time_utc` ORDER BY `process_history`.`log_time_utc` DESC LIMIT 1) AS `process_load`
FROM `sensor_history`;
Как сделать более эффективный просмотр сводных данных?Заранее спасибо.