2

我有两个非常大的表 > 1M 行。基本上,我需要的是在发现巧合时显示混合了 2 个表的信息的结果。简化,它们都有这样的结构:

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


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

如您所见,它们都有一个独特的字段item_id。我想要做的是找出哪些项目在两个表和showitem_id和. 我想知道提高性能的良好做法,我尝试过简单的查询some_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 引擎。

4

2 回答 2

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的性能。

于 2013-09-19T11:24:14.370 回答
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

于 2013-09-19T11:22:16.630 回答