Почему OUTER JOIN выполняется быстрее INNER JOIN?

Выполняю синхронизацию цен в бд, использую для этого временную таблицу
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`), просто хотелось бы понять причину такой разницы при том что внутреннее соединение должно отрабатывать быстрее внешнего. Заранее спасибо!
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
потому что планы выполнения разные. сравниваете планы, там ответ
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы