2011-09-28 72 views
3

我知道這個問題之前已被問到, example,我確實同意一個連接查詢比對第一個查詢返回的每個記錄執行另一個查詢更快。是一個加入比兩個查詢更快

但是,由於加入你往往會產生冗餘字段,這會減慢網絡?

比方說,我有一張桌子酒店,HOTEL有一張桌子HOTEL_IMAGE中的許多圖片。 HOTEL有20個領域。在HOTEL_IMAGE上進行加入會爲每個酒店圖像生成20個字段。這個查詢在網絡上仍然會更快嗎?

+6

警察出 - 它取決於:)。你的意思是內部或外部連接(外部效率低得多)?你使用的是什麼RDBMS?你在加入遠程桌面嗎?一般來說,連接速度會更快,但有很多例外。最好的辦法是查看你的情況下每個查詢計劃。 –

+1

@David - 雖然正確的答案! –

+0

INNER JOIN和MYSQL雖然我通常使用MS SQL Server – Jonny

回答

1

這取決於很多您的實際數據,但是從我所看到的,如果你有新的統計數據的良好參數DB,它是更好的把SQL中的加入,讓DB弄不清該怎麼辦。

無論如何,在我看來,數據庫查詢是您想要分析的第一件事。任何好的DBMS都有很多性能測量工具並不是巧合。而且您需要使用盡可能接近實際數據的數據進行配置文件(生產環境的最新副本最好)。

0

請勿使用select *,而只使用您需要的列。如果你這樣做,加入會更快(不知道爲什麼你會想要這樣做2查詢,你必須做2連接到您的數據庫等)。

+3

這個問題沒有提到'*' –

+0

我只是一個例子。很難用寫作來解釋整篇文章 – Jonny

+1

@Martin Smith:「*會產生20個字段*」聽起來很像'SELECT *'正在使用。 –

0

作爲一種解決方案,以避免重複聯接的數據,如果您的數據庫支持,您可以從單個查詢返回多個記錄集。一個記錄集將返回主記錄,第二個 - 詳細記錄加上主查詢中的關鍵字段。

select ID, Name, ... from HOTEL where <.... your criteria>; 

select h.ID as HotelID, i.ID, i.Description, i.ImageFile, .... from HOTEL_IMAGE i 
join HOTEL h on h.ID = i.HotelID and (<.... same criteria for HOTEL>) 

不知道如果在主表的查詢會被緩存,所以第二個選擇將重新使用它,但它會節省流量肯定。

我們使用這種方法進行查詢,這往往會返回多級聯接結果。

相關問題