2011-05-21 93 views
3

我對選擇兩種方法感到困惑。哪種方法更適合從數據庫檢索數據

情景
有兩個表分別Table 1Table 2Table 1包含用戶的數據,例如名字,姓氏等

Table 2包含每個用戶都有其描述的汽車。即Color,Registration No

現在,如果我想擁有所有用戶的所有信息,那麼什麼方法最好在最短時間內完成?

接近1

查詢爲Table 1所有行和他們都儲存在爲前一個列表。

然後根據在第一步中保存的用戶遍歷列表並查詢它並從Table 2獲取數據。

方法2

查詢所有行同時節省該行從table 2得到其所有的值並保存它們。

如果我想到系統進程,那麼我認爲它可能是相同的,因爲在這兩種方法中都有相同數量的記錄需要處理。

如果有任何其他更好的主意,請讓我知道

回答

6

你兩種方法都會有相同的性能(速度慢的原因N + 1查詢)。做這樣的單個查詢會更快:

select * 
from T1 
left join T2 on ... 
order by T1.PrimaryKey 

您的客戶端應用程序可以讓他們解釋結果並在單個查詢中包含所有數據。替代方案是:

select *, 1 as Tag 
from T1 
union all 
select *, 2 as Tag 
from T2 
order by T1.PrimaryKey, Tag 

這只是僞代碼,但您可以使其工作。

union-all查詢的性能會出人意料的好,因爲sql server會做一個像合併連接一樣工作的「merge union」。這種模式也適用於多層次的親子關係,儘管不如此。

+0

你應該提到,對於合理的大n這將是一個巨大的表現勝利。 +1還你的第二個查詢假設相同的列(否則你不能做工會) – Unreason 2011-05-21 10:27:34

+0

不合理的,我說這是僞代碼。可以通過對兩個表進行無效操作來使其適用於不同的列。 – usr 2011-05-21 10:58:26