我在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秒!为什么行得通?我怕丢失数据。
(显然,我的查询比这更复杂,只是一个例子)
答案 0 :(得分:1)
您还没有向我们展示EXPLAIN输出
EXPLAIN SELECT id
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.idt2
这无疑将为我们提供有关查询和表结构的一些见解。
根据您的情况,第一个查询似乎存在索引编制问题。
第二个查询中发生的事情是优化器正在从子查询中创建一个临时集,以进一步过滤数据。我不建议在大多数情况下这样做。 子查询的目的是解决复杂的逻辑,而不是即时解决所有问题。