我运行了一个测试执行Linq查询,与使用EF DataContext
中的存储过程调用相比。似乎存储过程调用快了大约100倍 - 为什么会这样?
LINQ示例:
var results = (from I in db.MyTable
select I).toList();
存储过程:
....
SELECT *
FROM myTable T
INNER JOIN TABLE2
INNER JOIN TABLE3
调用存储过程
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查询。
它看起来像这样
选择 [EXtent1] .COL1, [Extent2] .COL2 从table1作为extent1 左外连接表2为extent2
如果我执行上述查询,则每次执行需要9秒。有趣的是,如果我从选择列表中删除COL2,它将在2秒内执行。
为什么从选择列表中删除列会提高速度?现在这是在EF和LINQ之外,这是sql中的一个问题
答案 0 :(得分:0)
要审核的事项
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