在一對多關係的情況下,哪一個有更好的表現。選擇一對多哪一個更好
1的方法
public Order GetOrder(long orderId) {
var orderDetails =
(from o in Orders
from d in OrderDetails
where d.OrderId = o.Id && o.Id = orderId
select new {
Order = o,
Detail = d
}).ToList();
var order = orderDetails.First().Order;
order.Details = orderDetails.Select(od => od.Detail).ToList();
return order;
}
第二個方法
public Order GetOrder(long orderId) {
var order = Orders.First(o => o.Id == orderId);
order.Details = OrderDetails.Where(od => od.OrderId = orderId).ToList();
return order;
}
點,我想弄清楚(在性能方面),在第一種方式有單查詢,但重複數據正在在第二種方法中選擇哪裏有兩個單獨的查詢,但只選擇足夠的數據。
你可以假設Orders
和OrderDetails
是的EntityFramework(dbContext.Set<T>()
)或NHibernate的(session.Query<T>()
)的IQueryable<T>
。我嘗試了兩個,他們創建了非常相似的SQL查詢。據我所知,這些ORM內置的一對多查詢使用類似於第一種方法的東西。
更新,澄清我問:哪一個(單個查詢,但重複的數據或只需要的數據,但多個查詢)在哪些情況下表現更好?可能有很多我可能沒有想到的情況。這就是爲什麼我不嘗試基準測試。正如在某些答案中已經指出的那樣,列數或更多聯接是我預期的答案種類。 (可能還有一些關於表格和/或結果集的行計數)。基於這些答案,我可以嘗試基準測試。當然,我在問爲什麼?我沒有試圖解決Order - OrderDetail問題或者解決任何問題。我試圖學習和了解何時使用單個查詢,但是重複數據或只需要數據但多個查詢。
像往常一樣,有關哪個替代方案表現更好的問題只能由提問者回答。有時候一個查詢更快,有時兩個。我們不知道。 – 2014-11-03 22:19:22