table1_shard1(シャード×120個の破片あたり1,000,000行)MySQLは大規模データ
id_user hash
表2(100,000行)
value hash
所望の出力にベストプラクティスに参加します関連付ける最速の方法を見つけようとしていますid_userと値を上記の表から削除します。
現在のクエリは30時間実行され、結果は表示されません。
SELECT
table1_shard1.id_user, table1_shard1.hash, table2.value
FROM table1_shard1
LEFT JOIN table2 ON table1_shard1.hash=table2.hash
GROUP BY id_user
UNION
SELECT
table1_shard2.id_user, table1_shard2.hash, table2.value
FROM table1_shard1
LEFT JOIN table2 ON table1_shard2.hash=table2.hash
GROUP BY id_user
UNION
(...)
UNION
SELECT
table1_shard120.id_user, table1_shard120.hash, table2.value
FROM table1_shard1
LEFT JOIN table2 ON table1_shard120.hash=table2.hash
GROUP BY id_user
table2をメモリテーブルに読み込むのはどうですか?それは物事を少し速くするはずです。リンクの一部であるテーブルフィールド(table1.hashとtable2.hash)にインデックスが作成されていますか? – KKK
シャードを1つのテーブルにマージできませんか?私は労働組合はあまりにも重いです。 –
id_user、ハッシュ、および値のインデックス。 – reefine