2010-03-29 64 views
0

我有一個名爲Protocol的表,一個名爲Eligibility的表,和一個Protocol_Eligibilty表,它們將這兩個表映射在一起(一對多關係)。如果我想在協議表中創建條目的完美副本,並在Protocol_Eligibility表中創建所有需要的映射,從性能的角度來看,使用SQL視圖會有幫助嗎?協議將有大約1000行,資格將有大約200,我希望每個協議映射到約10個資格行和每個資格映射到協議中的100多行。什麼時候SQL視圖適合ASP.net MVC?

這裏就是我如何與視圖這樣做:

var pel_original = (from pel in _documentDataModel.Protocol_Eligibility_View 
           where pel.pid == id 
           select pel); 

Protocol_Eligibility newEligibility; 

foreach (var pel_item in pel_original) 
{ 

    newEligibility = new Protocol_Eligibility(); 

    newEligibility.Eligibility = (from pel in _documentDataModel.Eligibility 
               where pel.ID == pel_item.eid 
               select pel).First(); 

    newEligibility.Protocol = newProtocol; 

    newEligibility.ordering = pel_item.ordering; 

    _documentDataModel.AddToProtocol_Eligibility(newEligibility); 

} 

這是沒有的觀點:

var pel_original = (from pel in _documentDataModel.Protocol_Eligibility 
           where pel.Protocol.ID == id 
           select pel); 

Protocol_Eligibility newEligibility; 

foreach (var pel_item in pel_original) 
{ 
    pel_item.EligibilityReference.Load(); 

    newEligibility = new Protocol_Eligibility(); 

    newEligibility.Eligibility = pel_item.Eligibility; 

    newEligibility.Protocol = newProtocol; 

    newEligibility.ordering = pel_item.ordering; 

    _documentDataModel.AddToProtocol_Eligibility(newEligibility); 

} 

回答

1

隨着行數小,性能優化都不會作任何現代桌面或服務器硬件有顯着的不同。除非這是一個嵌入式系統,對於資源非常有限的情況,否則最好在其他地方分配開發時間。

+0

如果有10個左右的表格,如資格和適當數量的鏈接表,每個表中具有相同數量的條目,那麼怎麼辦?我有點擔心,因爲在「鏈接」表中克隆單個協議及其相關條目花費5秒左右的時間,並且現在表中的表格現在不足10%。 – sslepian 2010-03-29 23:44:00

+0

複製條目與讀取條目完全不同,因爲在此過程中必須鎖定許多對象。要在高連接環境中保持性能,您可以採取的主要措施是確保索引在所有密鑰上的構造良好,並將所需的連接數量減少到最低要求(可能需要仔細地對數據進行非規範化) 。 – 2010-03-30 00:10:13

3

視圖在SQL Server中沒有性能影響。從視圖中選擇或從視圖所基於的查詢中進行選擇,在每個方面,相同。實際上,當查詢計劃被構建時,視圖擴展爲

視圖可以影響性能的唯一時間是存在索引視圖或Oracle中調用的物化視圖。但索引視圖性能增益來自索引,而非來自視圖。事實上,從中選擇可以利用索引視圖的任何查詢都會利用它,而不僅僅是從視圖中進行選擇。索引視圖在非企業版本(Standard,Express)中未被考慮。實際上,每當討論SQL Server或任何關係數據庫中的性能時,問題就不再涉及如何設計查詢,queiston總是關於如何設計模式。適當的聚集索引和適當的非聚集索引,那會給出性能而不是視圖。

事實上,我沒有在響應中提及linq,也沒有MVC或ASP,因爲在討論SQL性能時,完全不相關

相關問題