首页 > 解决方案 > MySQL - 连接 3 个表的效率极低且不可靠的查询 - 如何改进?

问题描述

我在 DigitalOcean 机器上使用带有 INNODB 引擎的 MySQL。该机器具有 4GB 内存、80GB 磁盘和 2 个 vCPU,并在 Ubuntu 16.04 上运行。

我们有一个查询,它连接了三个运行非常缓慢的表(如果可以正常运行,大约需要 5 分钟才能返回)。表的大小分别为600 万行、2000 万行和 10 万行,表中每行都有唯一索引。

查询如下所示:

SELECT *, table2.column1
FROM table1 
INNER JOIN table2 on table1.column1 = table2.column1
INNER JOIN table3 on table1.column2 = table3.column1 
WHERE table3.column2 == "{ID}";

我们希望将此查询嵌入到数据处理/分析管道中,该管道将相关数据动态拉入内存,然后使用 R 运行进一步分析。为此,我们需要使此查询 [或执行相同操作的替代方法] 运行方式更有效。

有没有人知道如何使这个查询更有效率,或者这种放缓的原因可能是什么?任何帮助将不胜感激,

非常感谢!

标签: mysqlsql

解决方案


对于此查询:

select table1.*, table2.column1
from table1 inner join
     table2
     on table1.column1 = table2.column1 inner join
     table3
     on table1.column2 = table3.column1
where table3.column2 = "{ID}";

你想要索引:

  • table3(column2, column1)
  • table1(column2, column1)
  • table2(column1)

推荐阅读