优化mysql连接当列中有很多重复数据加入时
问题描述:
我有两个表,我需要通过一列连接并在两个表中建立索引。但是这两张表的两列都包含重复许多次的相同值。因此,用于连接看起来像这样的列:优化mysql连接当列中有很多重复数据加入时
TableA.column2表B.column3
1 2
1 2
1 1
4 1
4 4
5 3
现在据我从BNL和BKA算法了解,他们将采取从表格中的行逐一查找表B中的匹配记录。但是,查找此A表的第二行的匹配记录是没有意义的,因为该值再次为“1”,因此它已具有匹配的记录从具有相同列值的row1执行的操作。
这只是浪费时间和资源。如果它能够选择表A.column2中的不同值,然后查找表B列3中的匹配记录,然后将它们全部结合在一起,那将会更好。
你能告诉我一些在mysql中加入操作的另一种算法,它可以处理我正在谈论的那种事情。
答
通过使用Distinct将确保返回的最终列中的唯一性。现在,执行左连接将确保所有来自TableA ...但是,如果tableB中没有匹配记录,则COALESCE()将返回值0而不是null - 因此表示tableB文件中没有记录。
select TA.Column2, GROUP_CONCAT(TB.Column3 order by TB.Column3) As Column3Values
from
TableA TA
LEFT JOIN TableB TB
on TA.Column2 = TB.Column3
group by
TA.Column2
从你的数据,你应该得到类似
Column2 Column3Values
1 1, 2
4 1, 4
5 3
因为答案是不完全正确,你可能会更好,更新你的问题,表明你希望把它弄出来的东西。 – DRapp