У меня есть запрос, который выглядит примерно так:
INSERT IGNORE INTO `destination_table` (`id`, `field1`, `field2`, `field3`)
SELECT `id`, `field1`, `field2`, `field3`
FROM `source_table`
WHERE `source_table`.`id` IN (
SELECT DISTINCT `id` FROM `some_table`
UNION DISTICT SELECT DISTINCT `id` FROM `some_other_table`
);
Это не работает - запрос зависает бесконечно. Размер таблиц определенно не является проблемой, все таблицы имеют довольно небольшое количество записей (<100 000 записей). Запрос выполняется нормально и довольно быстро, если я запускаю его без <code>UNION:
INSERT IGNORE INTO `destination_table` (`id`, `field1`, `field2`, `field3`)
SELECT `id`, `field1`, `field2`, `field3`
FROM `source_table`
WHERE `source_table`.`id` IN (
SELECT DISTINCT `id` FROM `some_table` -- I tried with `some_other_table` too, same result
);
или
INSERT IGNORE INTO `destination_table` (`id`, `field1`, `field2`, `field3`)
SELECT `id`, `field1`, `field2`, `field3`
FROM `source_table`
, которые работают и работают хорошо и быстро (менее чем за секунду). Итак, я думаю, что UNION DISTICT SELECT ...
является виновником здесь, но я не знаю почему.
Что не так с этим запросом и почему он зависает?
Использование mysql 5.7 - это это имеет значение