mysql查询的最佳方法:使用id从多个表中获取记录

时间:2013-05-11 14:54:16

标签: mysql select indexing query-performance

从3个表中获取记录的最有效方法是什么,使用所有表中存在的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

你可以理解,在table2中,id是主键,id = 22有some_data =水果卖家,而在table3中id是主键,id = 22有some_data = company

我应该使用什么来获得表1的primary_id的前5条记录,并获得其他两个表中的记录,如我演示的那样?

加入?一个子查询?我关心的是表现

1 个答案:

答案 0 :(得分: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(按此顺序)有索引,则查询可能执行得更好。