我想与df2加入表df1。问题是,df2是一个非常长的表,有四千万观察值,而且在等待超过48小时后我无法在MySQL中获得连接结果。所以我想问问是否有任何方法可以提高这种连接的效率。我已经为两个表格的标签列添加了一个索引。如何提高MySQL连接效率?
DF1和DF2具有相同的结构,这里有一个例子:
|Id |Tag
| -------- | --------------------------------------------
|1 |c#
|1 |winforms
|1 |type-conversion
|1 |decimal
|2 |.net
|2 |decimal
|3 |.net
|3 |math
两个表有两列,标识和标签。但是,Id或Tag都不是唯一标识的密钥。只有Id + Tag可以是唯一标识的密钥。我需要的是在列标签上省略df1与df2的连接。这里是我的代码:
CREATE TABLE matched_outcome AS
SELECT df1.Id AS df1_Id, df2.Id AS df2_Id, COUNT(df2.Tag) AS overlapping
FROM df1
LEFT JOIN df2 ON df2.Tag=df1.Tag
GROUP BY df1.Id, df2.Id;
在这些列上添加索引。这将有所帮助。在这之前,运行EXPLAIN PLAN并查找表扫描。如果你看到一个,你会知道添加索引将会有所帮助。 – duffymo
@duffymo对不起,我忘了提及之前,我已经在两个表格的标签列上添加了一个索引。 – Xiaomeng
4000万行?你完蛋了。您需要在该大表上过滤以减小JOIN的大小。 – duffymo