MYSQL加入。如何加入第一场比赛? (加入限制1)

时间:2014-09-18 10:01:49

标签: mysql sql performance join greatest-n-per-group

我有一张包含1 000 000条记录的表格。 (t1) 有"选择查询"它们非常快,并返回ID的单列结果。 (结果我只有唯一的ID。例如:1,2,5,10,.. (没有重复值)

EXPLAIN SELECT只显示我输入indexref(完美查询:))

但我需要通过这种方式从记录中过滤此结果: 内部联接与其他1 000 000表(t2

ON (`t1`.`some_column_id` = `t2`.`ref_id` AND `t1`.`user_id` = 4)

它显示了t1的所有匹配项。some_column_id = t2ref_id 即使我使用

GROUP BY `t1`.`some_column_id` AND/OR LIMIT of 30 ROWS

它失败了mysql服务器

您打算如何仅在首次匹配时限制此INNER JOIN?

1 个答案:

答案 0 :(得分:2)

有了这些信息,我就能找到这个解决方案。这可能需要一些时间才能在如此庞大的数据库上执行。我仍然在寻找更好的选择。

假设字段“some_column_id”或“ref_id”不是唯一的。首先通过选择一个具有某些聚合函数的id(主键)来使它们成为唯一的,例如MIN()。像这样使用它:

SELECT tTwo.* FROM (SELECT notUnique, MIN(id) AS min FROM t GROUP BY notUnique) tOne INNER JOIN t AS tTwo ON (tTwo.id=tOne.min)

请注意,上述查询仅适用于一个表,以使给定列唯一。

根据需要将其应用于表格之后,您只需执行此操作

SELECT * FROM t1_unique INNER JOIN t2_unique ON (t1_unique.some_column_id = t2_unique.ref_id)

其中t1_uniquet2_unique分别具有some_column_idref_id的唯一值。