2013-01-07 38 views
2

使用SQL Server 2008 R2 哪一個更好(更快,更少的中間表,更少的內存使用量)和慣例?使用內聯查詢或連接從另一個表中獲取數據?

SELECT staff.id, staff.name, details.address, salary.hourly_rate, 
manager.name, boss.name 
FROM STAFF_TABLE staff 
LEFT JOIN STAFF_DETAILS_TABLE details on staff.id = details.id 
LEFT JOIN STAFF_SALARY_TABLE salary on staff.id = salary.id 
LEFT JOIN STAFF_TABLE manager on staff.manager_id = manager.id 
LEFT JOIN STAFF_TABLE boss on staff.boss_id = boss.id 

SELECT staff.id, staff.name, 
(SELECT address FROM STAFF_DETAILS_TABLE id = staff.id) [address], 
(SELECT hourly_rate FROM STAFF_SALARY_TABLE WHERE id = staff.id) [hourly_rate], 
(SELECT name FROM STAFF_TABLE WHERE id = staff.manager_id) [manager_name], 
(SELECT name FROM STAFF_TABLE WHERE id = staff.boss_id) [boss_name] 
FROM STAFF_TABLE staff 

謝謝!

+0

通常情況下,查詢優化器將切入這兩者,以提供相同的查詢執行計劃。檢查計劃並查看它們是否相同,如果是這樣,則表現不存在性能差異。 –

回答

4

如果您在所有表中的所有適當ID上都有索引,則查詢應該生成相同的執行計劃。一個細微的區別是優化器可能會以不同的方式處理內嵌查詢,因爲它們只能返回一行(否則會產生錯誤)。

我更喜歡在可能的情況下保留from子句中的所有表格引用。我發現它可以更容易地維護查詢 - 所有的表引用都在一個地方。所以,我更喜歡joins的格式。

2

獲得答案的唯一方法是定時並檢查各種查詢的執行計劃。我相信SQL Server會嘗試優化查詢,因此可能在時間上幾乎沒有什麼區別。使用JOIN的版本更具可讀性,如果性能沒有太大差異,那麼我的偏好就是我的偏好。

相關問題