簡體   English   中英

多表聯接優化性能

[英]multiple table join optimizing performance

我有一個項目,該項目使用具有用戶和聯系表的數據庫。 它們如下所示:

UserTable:
    UserID     FirstName     LastName
    1          John          Smith
    2          Ted           Raimi
    3          Brian          Park

ContactTable:
    ContactID     UserID     ContactType   PhoneNum
    1             1          Home          5555555555
    2             1          Work          4444444444
    3             2          Home          3333333333

並且此表的示例右連接將是

UserID     FirstName     ContactID     ContactType   PhoneNum
1          John          1             Home          5555555555
1          John          2             Work          4444444444
2          Ted           3             Home          3333333333
3          Brian                     

我的C#業務對象看起來像:

public class User
{
     public int UserID{get;set;}
     public string FirstName{get;set;}
     public string LastName{get;set;}
     public IEnumerable<Contact> Contacts {get;set;}
}
public class Contact
{
     public int ContactID{get;set;}
     public int UserID{get;set;}
     public string ContactType{get;set;}
     public string PhoneNum{get;set;}
}

所以我的問題是:合並這些數據的最佳方法是什么? 我是不是該

1)通過SQL執行此操作,也許使用PIVOT或CONCAT將John Smiths合並為1行,然后從數據表輸出中進行管理以適合我的對象? 這意味着輸出可能如下所示:

UserID     FirstName     HomePhoneNum     WorkPhoneNum
1          John          5555555555       4444444444
2          Ted           3333333333
3          Brian       

我會以這種方式丟失數據(contactID),並且很難擴展

2)進行多個SQL調用,而不只是1個? 當我列出“用戶”列表時,我還必須列出“聯系人”列表,然后通過代碼將其加入?

3)僅使用1個SQL調用,進行原始的右連接,並通過LINQ優點對用戶進行選擇,並使用適用的行填寫其聯系數據?

我傾向於#2,但我想確保自己不會錯過其他選擇。 我覺得讓SQL語句更復雜(#1)是個壞主意,但是我擔心用戶表變大時#2和#3的處理時間。 有沒有人建議最好的前進方向?

我想知道為什么要合並數據。

您的班級中已經有IEnumerable<Contact> Contacts屬性。

您只需要在LINQ調用上使用include方法。

var lUsers = from usr in dbcontext.User.Include(t => t.Contacts)
             select usr;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM