mysql - 两个 MySQL 表上的内连接超时

标签 mysql sql indexing

这里有两个表,每个表只有 50K 行:

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

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

最佳答案

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

关于mysql - 两个 MySQL 表上的内连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53431892/

相关文章:

mysql - 如何根据逗号分隔值从数据库获取数据

Mysql - 删除重复项

python - 如何有效访问 Pandas 中满足条件的第一个和最后一个出现的索引

java - 使用 lucene 创建和查询 n-gram 索引

mysql - 如何结合 Node.js 设置 MySQL

mysql - 使用 OPENQUERY 从 MySQL 链接 SQL Server 中的表以获取刚刚更新的记录

mysql - 简单的 mysqli 连接查询不起作用

php - 具有相同日期的 Datediff 之和

sql - 通过sql View 向多个表中插入数据

mysql - 何时针对复合索引选择散列列