MySQL-连接3个表的查询效率极低且不可靠-如何改进?

时间:2018-10-18 16:31:30

标签: mysql sql

我在DigitalOcean机器上将MySQL与INNODB引擎一起使用。该机器具有4GB内存,80 GB磁盘和2vCPU,可在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运行进一步的分析。为此,我们需要进行此查询[或替代方法,执行相同的操作事物]更有效地运行。

是否有人对如何提高此查询的效率有任何想法,或者导致此速度下降的原因是什么?任何帮助将不胜感激,

非常感谢!

1 个答案:

答案 0 :(得分:1)

对于此查询:

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)