我有 big_table
大约有几亿行,correlation_table
大约有几千行。 Corelation_table
通过 dep_id
字段值将 big_table
的行相互关联。
我要从big_table
中选择所有关联行的id。
示例:
big_table
id name dep_id <other_data>
341 "vehicle" 6 .....
342 "byce" 19 .....
343 "ferrari" 6 .....
correlation_table
dep_id1 dep_id1
6 19
expected result:
id1 id2
341 342
343 342
问题: 如何在 MySQL 中以最有效的方式做到这一点?
最佳答案
您可以通过给它两个不同的别名将大表两次连接到相关表,如下所示:
SELECT
b1.id AS id1,
b2.id AS id2
FROM
big_table b1
INNER JOIN Correlation_table c ON c.dep_id1 = b.id
INNER JOIN big_table b2 ON b2.id = c.dep_id2
但是如果你想从一个亿行表中选择所有这些记录,这可能需要一段时间。但我认为没有比这更有效的方法了。
索引可能有帮助,但如果您要选择所有记录则几乎没有帮助。联接的顺序可能会有所帮助,因此您可以从相关表开始,看看它是否更快:
SELECT
b1.id AS id1,
b2.id AS id2
FROM
Correlation_table c
INNER JOIN big_table b1 ON b.id = c.dep_id1
INNER JOIN big_table b2 ON b2.id = c.dep_id2
这取决于确切的数字。 big_table 中的所有行是否都已连接,您是否要选择所有这些行,有多少“组”(dep_ids),等等。
关于MySQL:选择相关行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865655/