Соедините две одинаковые таблицы в строках с разными значениями - PullRequest
0 голосов
/ 11 мая 2011

У меня есть две идентичные таблицы, одна с текущими значениями для строк и одна с новыми значениями.Я пытаюсь выбрать только строки из новой таблицы значений, где любой столбец в новой таблице значений имеет значение, отличное от столбца в старой таблице значений.Теперь используемый мной запрос выглядит следующим образом:

SELECT `new`.`item_id` 
  FROM `new_items` AS `new` 
  JOIN `items`  AS `old` 
 WHERE new.item_id = old.item_id
   AND (new.price != old.price || 
        new.description != old.description || 
        new.description_long != old.description_long || 
        new.image_small != old.image_small || 
        new.image_large != old.image_large || 
        new.image_logo1 != old.image_logo1 )

Однако этот запрос занимает слишком много времени для выполнения.Есть ли в MySQL лучший способ сделать это или кто-нибудь знает более эффективный запрос?

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Использование:

SELECT n.item_id
  FROM NEW_ITEMS n
 WHERE EXISTS (SELECT NULL
                 FROM OLD_ITEMS o
                WHERE o.item_id = n.item_id
                  AND (o.price <> n.price
                   OR o.description <> n.description 
                   OR o.description_long <> n.description_long 
                   OR o.image_small <> n.image_small 
                   OR o.image_large <> n.image_large 
                   OR o.image_logo1 <> n.image_logo1))

Индексировать все сравниваемые столбцы.

0 голосов
/ 11 мая 2011

Если item_id (sku) довольно уникален (не так много дубликатов item_id в таблицах), то вы увидите значительное улучшение производительности, просто добавив индекс для item_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...