我想與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