Выполняю синхронизацию цен в бд, использую для этого временную таблицу
CREATE TEMPORARY TABLE `tmp_products` (
`main_price` decimal(15,4) NOT NULL DEFAULT '0.0000',
`sale_price` decimal(15,4) NOT NULL DEFAULT '0.0000',
`product_id` int(11) DEFAULT NULL,
`option_value_id` int(11) DEFAULT NULL,
`price` decimal(15,4) NOT NULL DEFAULT '0.0000'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
При обновлении опций товара выполняю такой запрос
UPDATE `oc_product_option_value` `pov`
INNER JOIN `tmp_products` `tmp`
ON `tmp`.`product_id` = `pov`.`product_id`
AND `tmp`.`option_value_id` = `pov`.`option_value_id`
SET `pov`.`price` = `tmp`.`price`;
Но проблема в том, что время выполнения достигает 5 минут (опций всего около 1700), при этом если заменить соединение на
LEFT JOIN
запрос выполнится за 1 минуту. Проблему я решил добавлением индекса
INDEX (`product_id`, `option_value_id`)
, просто хотелось бы понять причину такой разницы при том что внутреннее соединение должно отрабатывать быстрее внешнего. Заранее спасибо!