“ INNER JOIN表”和“ INNER JOIN(SELECT表)”之间的区别?

时间:2019-07-16 12:40:32

标签: mysql database inner-join

我在mysql中执行查询,该查询花费30秒来执行。格式如下:

SELECT id
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.idt2

内部联接需要30秒中的25秒。当我这样写时:

SELECT id
FROM table1 t1
INNER JOIN (
    SELECT idt2,col1,col2,col3
    FROM table2
) t2
ON t1.id = t2.idt2

仅需8秒!为什么行得通?我怕丢失数据。

(显然,我的查询比这更复杂,只是一个例子)

1 个答案:

答案 0 :(得分:1)

您还没有向我们展示EXPLAIN输出

EXPLAIN SELECT id
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.idt2

这无疑将为我们提供有关查询和表结构的一些见解。

根据您的情况,第一个查询似乎存在索引编制问题。

第二个查询中发生的事情是优化器正在从子查询中创建一个临时集,以进一步过滤数据。我不建议在大多数情况下这样做。 子查询的目的是解决复杂的逻辑,而不是即时解决所有问题。