在两个MySQL表上进行内部联接超时

时间:2018-11-22 13:18:05

标签: mysql sql indexing

这里有两个表,每个表中只有5万行:

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优化查询,但这不是主要问题。由于几乎没有数据(5万行),因此该查询不应无限加载。我错过了什么吗?

旁注:我在全新安装的MySQL 8(通过MacOS上的brew安装)上运行此查询。我在另一台配置完全不同的计算机(Windows上的Ubuntu VM,MySQL5)上用相同的数据看到了相同的问题

1 个答案:

答案 0 :(得分:1)

id_order中的列ps_product_access默认为0,也许您需要检查id_order = 0的行数