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

我有一张包含1 000 000条记录的表格. (T1)

拥有非常快的“选择查询”并返回ID的单列结果. (结果我只有唯一的ID.例如:1,2,5,10,..(没有重复值))

EXPLAIN SELECT显示我只输入index和ref(完美查询:))

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

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

它显示了t1.some_column_id = t2.ref_id的所有匹配项
即使我使用

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

它失败了mysql服务器

你打算做什么来限制这个INNER JOIN只与第一场比赛?

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

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

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_unique和t2_unique将分别具有some_column_id和ref_id的唯一值.

点赞