2013-05-11 51 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

相關問題