【发布时间】:2020-09-18 23:01:19
【问题描述】:
我有一个关于 SQL 查询的问题。 我需要两个独立表中的所有行,这些表没有将它们连接到第三个表中的行。查询以这种方式工作,但性能很差。
现在我的查询如下所示:
SELECT s.id,
u.id
FROM table1 s,
table2 u
WHERE NOT EXISTS
(
SELECT *
FROM table3 sj
WHERE sj.s_id=s.id
AND sj.u_id=u.id
)
table3 上的键是:
ALTER TABLE `table3`
ADD PRIMARY KEY (`id`),
ADD KEY `s_id` (`s_id`),
ADD KEY `u_id` (`u_id`);
table1 有 4 行, table2 有 80.000 行, table3 有 30.000 行
任何想法如何优化它? 现在查询最多需要 20 分钟才能给出结果。
编辑:
关于 20 分钟 -> 我忘了在table3(u_id) 上设置密钥
设置密钥后,只需几秒钟。太好了。
【问题讨论】:
-
感谢您的反对,但我认为我的问题甚至我的 SQL 查询对于曾经接触过 SQL 的每个人来说都非常清楚。我还应该为三个只有 ID 的表提供 CREATE TABLE 代码?
-
请注意,'EXITS' 不是 MySQL 中公认的术语
-
此外,除了所有相关表的 SHOW CREATE TABLE 语句之外,有关查询性能的问题总是需要对给定查询的 EXPLAIN
标签: mysql sql join subquery query-optimization