我有以下表結構 -SQL Server:設計:嵌入式Select語句或INNER JOIN?
網站:主tablefor網站
組織:師父組織
表用戶:用戶主表(每個用戶鏈接到一個獨特的組織通過 User.OrgId)
OrgSite:存儲一些'組織特定'網站詳細信息(OrgId,SiteId,SiteName, SiteCode)。並非所有網站,但只有 組織可以訪問的網站。
UserSite:將用戶鏈接到他可訪問的網站(UserId,SiteId)。 當用戶鏈接到Org UserSite 將成爲OrgSite表的一個子集。
ItemSite:表用於存儲一些項目&網站具體細節(項ID, SITEID,ORGID,...)
現在,我已經從 'ItemSite' 過濾\顯示記錄而且我還需要顯示Sitecode。所以,我看到下面的兩個選項 -
1.創建一個視圖: vw_ItemSite_UserSite_OrgSite(INNER JOIN上SITEID所有表) - 這會給我訪問所有的「OrgSite」表中提供的組織具體細節(即SITECODE,等..)
如果你能注意到我已經爲包括 「OrgSite」只因爲我想 具體組織SITECODE & SITENAME的看法。 因爲UserSite已經過濾網站 - 所以我可以 '排除'OrgSite表和 消除不必要的INNER JOIN。
2.根據上述注 - 第二個選項是創建一個視圖:vw_ItemSite_UserSite和「選擇」的VIEW我可以嵌入以下SELECT樣的語句 -
CREATE VIEW vw_ItemSite_UserSite AS
SELECT ItemSite.SiteID,
(SELECT TOP 1 [SiteCode] FROM OrgSite WHERE OrgId = ItemSite.OrgId) AS SiteCode,
...
FROM ItemSite INNER JOIN UserSite ON ItemSite.SiteId = UserSite.SiteId
我唯一的意圖是 - 我相信INNER JOIN和WHERE將在評估嵌入式select語句之前進行評估。那麼,這是否爲我節省了一些性能?或者是讓vw_ItemSite_UserSite_OrgSite更好的想法。
選項#1或選項#2?
謝謝。
那麼,你是說選項#1和選項#2與性能觀點相似嗎?因爲選項#1顯然更簡單和直接選擇! – 2009-11-18 14:43:49
我不是說任何一個都更好。我所說的只是運行一些測試並看看。在你的情況下設置一個測試來做這件事有多難?如何做的最好的指標是運行測試,並根據您的發現得出結論。我總是非常懷疑有人告訴我,選項1或選項n是最好的選擇,沒有真實的事實。 – Kuberchaun 2009-11-18 15:13:59