我發現this link這解釋了我的問題,並有一個答案,但似乎無法使其工作。LinqToSQL查詢loadwith性能
下面是我對DataLoadOptions:
options.LoadWith<Support>(p => p.PostBase);
options.LoadWith<Support>(p => p.PostMaterial);
options.LoadWith<Support>(p => p.PostPosition);
options.LoadWith<Support>(p => p.PostSize);
options.LoadWith<Support>(p => p.PostType);
options.LoadWith<Support>(p => p.Signs);
options.LoadWith<Support>(p => p.SupportComments);
options.LoadWith<Support>(p => p.SupportInspections);
options.LoadWith<Support>(p => p.SupportPhotos);
options.LoadWith<Sign>(p => p.SignBacking);
options.LoadWith<Sign>(p => p.SignComments);
options.LoadWith<Sign>(p => p.SignCondition);
options.LoadWith<Sign>(p => p.SignDelineator);
options.LoadWith<Sign>(p => p.SignFace);
options.LoadWith<Sign>(p => p.SignIllumination);
options.LoadWith<Sign>(p => p.SignToSignObstructions);
options.LoadWith<Sign>(p => p.UniformTrafficControlCode);
options.LoadWith<SignToSignObstruction>(p => p.SignObstruction);
我認爲這會給我的對象圖的一個很好的解釋。我試圖查詢符合特定搜索條件的支持對象(也許有人希望支持帖子類型的等等)。
如果我嘗試只返回所有支持,我得到約2200支持,它需要17k查詢。
我試圖在另一個問題中提到的分組解決方案,但我想知道如果我做錯了,或者我的情況太複雜。我刪除了搜索條件,並試圖返回所有支持。這導致約21k查詢並拉回約3000支持。這裏是我的查詢:
var group =
from support in roadDataContext.Supports
join sign in roadDataContext.Signs on support.SupportID equals sign.SupportID
group sign by sign.Support
into signGroup
select signGroup;
我只是想念一些簡單的東西嗎?謝謝。
你爲什麼試圖在搜索查詢中取回所有數據*? *您找到*您正在尋找的'Support'後,您應該使用'LoadWith'。如果你實際上需要返回一個非規範化的表作爲你的搜索結果的一部分,你應該使用'Select'運算符並返回一個'x => new {x.PostBase.XXX等}顯示。還要考慮分頁 - 無論您如何獲取數據,3000行都不合適。 – 2010-11-17 18:53:59
我會再次從頭開始:如果刪除所有LoadWith,會發生什麼情況:當時正在生成的SQL是什麼?之後開始調整 – Pleun 2011-02-22 17:59:44