Вот две таблицы, каждая из которых содержит только 50 тыс. Строк:
CREATE TABLE `ps_product_access` (
`id_order` int(10) UNSIGNED NOT NULL DEFAULT '0',
`id_product_access` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `ps_product_access`
ADD KEY `id_order` (`id_order`);
CREATE TABLE `ps_orders` (
`id_order` int(10) UNSIGNED NOT NULL,
`id_order_renew` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `ps_orders`
ADD PRIMARY KEY (`id_order`)
ADD KEY `ps_orders__id_order_renew__index` (`id_order_renew`);
Таблицы слишком упрощены только с соответствующими полями.Внешнего ключа нет, но я не могу добавить его сейчас (данные в этой базе данных несовместимы).
Этот запрос не работает (это означает, что это бесконечная загрузка):
SELECT pa.`id_product_access`
FROM `ps_product_access` pa
INNER JOIN `ps_orders` o ON pa.id_order = o.id_order_renew;
Я не могу понять, почему?Это кажется довольно простым, просто внутреннее соединение.Я знаю, что могу оптимизировать запрос с помощью WHERE EXISTS
, но это не главный вопрос.Этот запрос не должен приводить к бесконечной загрузке, так как данных почти нет (50 тыс. Строк).Я что-то пропустил?
примечание: я запускаю этот запрос на новой установке MySQL 8 (установленной через brew на MacOS).Я видел ту же проблему с теми же данными на другом компьютере с совершенно другой конфигурацией (Ubuntu VM на Windows, MySQL5)