[英]EF Linq query is 100x slower than stored procedure
與使用EF DataContext
的存儲過程調用相比,我運行了一個測試執行Linq查詢。 並且看起來存儲過程調用快了大約100倍 - 為什么會這樣?
LINQ示例:
var results = (from I in db.MyTable
select I).toList();
存儲過程:
....
SELECT *
FROM myTable T
INNER JOIN TABLE2
INNER JOIN TABLE3
CALL到存儲過程
var results = this.Database.SQlQuery<MyModel>("spMyStorePro").ToList()
Linq執行需要10-15秒,而存儲過程調用將花費1-2秒,如果不是更少。
該模型包含幾個實體
MyTableModel
public int KEY {Get;set;}
public virtual TABLE1 table1Info {get; set;}
public virtual TABLE2 table2Info {get; set;}
這是常見的還是我錯誤地設置了我的模型?
我要提到的一件事是我的MODEL有一些嵌套模型可能會導致性能下降。
更新
所以我找到了一些有趣的東西:
我從LINQ吐出的sql監視器中獲取sql查詢。
它看起來像這樣
SELECT [EXtent1] .COL1,[Extent2] .COL2 FROM table1 as extent1 left outer join table 2 as extent2
如果我執行上述查詢,每次執行需要9秒。 有趣的是,如果我從選擇列表中刪除COL2,它將在2秒內執行。
為什么從選擇列表中刪除列會提高速度? 現在這不在EF和LINQ之內,這是sql中的一個問題
要檢討的事情
var query = context.Query<Thing>(
include: t => t.Child.Select(v => v.Grandchild))
.Where(t => t.Foo == "bar"); // includes descendants
var query = context.Query<Thing>()
.Where(t => t.Foo == "bar"); // excludes descendants
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.