多个mysql连接用于大量内存

时间:2018-06-07 06:10:42

标签: mysql join memory

我有大约20个相当小的表(最大的有大约2k行,通常大约100行,每行4到20列)我尝试加入

select  ... from table1
left join table2 on table1.name = table2.t2name
left join table3 on table1.name = table3.othername
left join table4 on table2.t2name = table4.something
and so on

理论上它应该返回大约2k行,可能有80列,所以我猜数据量本身不是问题。 但它耗尽内存。从阅读这里的几篇文章,我发现mysql internaly首先制作一个大的“全部x全部”-table,然后减少它。如何在每次加入后强制它执行连接,这会占用更少的内存?

1 个答案:

答案 0 :(得分:0)

为了清楚说明,在您的情况下,预期的数据量不是问题。

似乎问题在于您要求系统比较A X B X C X D ...行(计算它的含义并得到图片)。

我之前的一条评论中描述的一般想法是让您查询如下:

SELECT * FROM (select  ... from table1
                where .....
              ) A
LEFT JOIN SELECT * FROM (select ... from table2
                          where .....
                        ) B
ON A.name = B.t2name    
LEFT JOIN SELECT * FROM (select ... from table3
                          where .....
                        ) C
ON A.name = C.othername
LEFT JOIN SELECT * FROM (select ... from table4
                          where .....
                        ) D
ON B.name = D.something

通过这种方式,并假设这适用于您确实有条件放入内部选择的where .....子句,您将减少每个表中需要的记录数量在加入期间进行比较。