2013-05-11 138 views
-2

使用所有表中存在的用于链接数据的id从3个表中获取记录的最有效方法是什么?mysql查询的最佳方法:使用id获取多个表中的记录

  • 第一张表:id不是主键。许多记录具有相同的id值。此表的主键是“primary_id”

  • 二表:id为主键

  • 三表:id为主键

所以我们有很多一对一的关系第一张桌子上的其他两个表“ID”。当然,第二个到第三个表在“id”上有一对一的关系,因为“id”是它们的主键。

我要选择从第一台5次的记录(可以说为了通过先表primary_id ASC - 跨表共享ID),但我也想从其他两个表中的记录。

我应该得到

table1.primary_id | table1.id | table1.some_data | table2.some_data | table3.some_data 
-------------------------------------------------------------------------------------- 
       1 |  22 |   oranges |  fruit seller |   company 
       4 |  22 |  watermelons |  fruit seller |   company 
       13 |  22 |   bananas |  fruit seller |   company 
       15 |  22 |   pears |  fruit seller |   company 
       19 |  22 |   beans |  fruit seller |   company 

,你可以理解,表2中,其中id是主键,ID = 22已经some_data =贩夫走卒,并在表3其中id是主键,ID = 22 some_data = company

我应该如何使用表1的primary_id获得前5条记录,并从另外两个表中获取记录,例如我演示的?

A加入?子查询?我关心的是性能

+0

'JOIN''s通常有更好的表现。 – luksch 2013-05-11 15:01:54

+0

你有'table1.id'上的索引吗? – 2013-05-11 15:10:57

+0

@MarkBannister我可以创建尽可能多的索引,因为INSERTS很少见。是的,可以有一个索引。和其他任何索引。特别是我已经索引table1.id列 – Sharky 2013-05-11 15:14:33

回答

0

尝试:

select t1.primary_id, t1.id, t1.some_data, t2.some_data, t3.some_data 
from table2 t2 
join table3 t3 on t2.id = t3.id 
cross join (select * from table1 where id = 22 order by primary_id limit 5) t1 
where t2.id = 22 

确保有上table1.id的索引;查询可能执行更好,如果有id,primary_id(按该顺序)的索引。

+0

谢谢你的帮助,我创建了一些测试数据和测试 – Sharky 2013-05-11 15:28:18

相关问题