2009-10-31 46 views
0

我有兩個主表組織 & 項目,然後有一個OrgItem table.I部署視圖或使用功能必須獲取特定組織ItemCodes用於查找

表結構:

  • 組織(ID,OrgCode,名稱) - 組織主表
  • 項目(同上,ItemCode,名稱) - 項目主表
  • OrgItem(項目Id,ORGID,ItemCode ) - 有些組織特定ItemCodes

現在只有一些項目的組織具有特定ItemCode所以默認我取ItemCode˚F ROM項目,但如果對於特定項目+組織組合如果其記錄存在在OrgItem表中,那麼我必須從OrgItem表中獲取ItemCode。

創建一個View_OrgItem_Item可能是一個解決方案,但它意味着一個視圖,它包含n倍原始Item表(其中n = Orgs數)的大小。

另一種選擇是創建一個GetItemCode(項目Id,ORGID)它執行查找並返回要麼Item.ItemCode或ORgITem.ItemCode

所以,我的問題是 - 我應該去一個「View_OrgItem_Item」或者簡單地創建一個函數 GetItemCode(ItemId,OrgId)?

哪一個在性能方面最好?任何其他因素要考慮。

**注:這是沒有必要的,所有的[機構有記錄OrgItem *

+0

這個問題有什麼技術? SQL可能?您能否將該技術的名稱添加爲標籤? – 2009-11-02 14:58:22

回答

1

它幾乎總是將是該視圖將執行比使用功能較好的情況下。這是因爲你經常想要以基於集合的方式獲取物品代碼。有了這個函數,這個查找必須在一行一行地發生。有了一個視圖,你可以做一個簡單的連接,並且查詢優化器可以選擇更多的最優計劃,而不是逐行查找,這是該函數實質上的作用。

+0

+1:如果在SELECT中調用該函數(這裏就是這種情況),那麼您正在運行一個SUBSELECT - 它將針對每個返回的記錄執行。你會得到你想要的,但隨着行數的增加,性能會變差。 – 2009-10-31 16:55:45