MYSQL:搜索2个表> 1M行之间重合的最佳方式

时间:2013-09-19 11:15:43

标签: mysql database mysqli

我有两个非常大的表>每行1M行。基本上,我需要的是显示结果,当找到巧合时,两个表的信息混合在一起。简化,他们都有这样的结构:

TABLE_A:
-------
id | item_id | some_fields_A


TABLE_B:
-------
id | item_id | some_fields_B

如您所见,它们都有一个唯一的字段item_id。我想要做的是找到两个表格中的哪些项目并显示item_idsome_fields_Asome_fields B。我想知道提高性能的良好做法,我尝试过简单的查询

SELECT item_id, some_fields_A, some_fields_B 
FROM TABLE_A, TABLE_B 
WHERE TABLE_A.item_id = TABLE_B.item_id

显示超过1小时后的结果。我正在使用InnoDB引擎。感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:5)

执行以下工作:

SELECT a.item_id, a.some_fields_A, b.some_fields_B 
  FROM TABLE_A a 
  INNER JOIN TABLE_B b ON a.item_id = b.item_id;

在执行查询之前,只执行一次查询。

CREATE INDEX fields_a_idx ON TABLE_A(item_id);

并且

CREATE INDEX fields_b_idx ON TABLE_B(item_id);

表示您需要对表进行索引以提高查询INDEX的性能。

答案 1 :(得分:2)

我猜最好的方法是使用INNER JOIN:

SELECT *
FROM   table_a AS A
       INNER JOIN table_b AS B
               ON A.item_id = B.item_id  

确保您的item_id是主键。

http://dev.mysql.com/doc/refman/5.7/en/join.html