我有一张包含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?
答案 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_unique
和t2_unique
分别具有some_column_id
和ref_id
的唯一值。