【发布时间】:2015-08-26 18:42:50
【问题描述】:
我有几个大表,其字段如下:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
| fid1 | varchar(10) | NO | MUL | NULL | |
| fid2 | varchar(10) | NO | | NULL | |
| cnt | int(11) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
我在{fid1,fid2,cnt} 上有索引,并且每个表都有超过20000000 行。
我想将这些表合并为一个,如果fid1 和fid2 都匹配,那么新的cnt 值将是这些表中cnt 的总和。
我尝试了merge and add values from two tables中建议的方式,得到了类似的东西
SELECT COALESCE(A.fid1, B.fid1) AS fid1, COALESCE(A.fid2, B.fid2) AS fid2, (COALESCE(A.cnt,0)+COALESCE(B.cnt,0))
FROM test1 A LEFT JOIN test2 B ON a.fid1 = b.fid1 AND A.fid2 = B.fid2
UNION
SELECT COALESCE(A.fid1, B.fid1) AS fid1, COALESCE(A.fid2, B.fid2) AS fid2, (COALESCE(A.cnt,0)+COALESCE(B.cnt,0))
FROM test1 A RIGHT JOIN test2 B ON a.fid1 = b.fid1 AND A.fid2 = B.fid2
但是,由于我有几张表而且它们都非常大,所以UNION 的这种方法非常耗时。有没有其他方法可以有效地实现它或优化它?
谢谢!
【问题讨论】:
标签: mysql optimization merge union