Задать вопрос

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

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

Похожие вопросы