我已经在数据库中创建了一个视图,该视图为我提供了一个组织结构的表示形式。的确,我在这个视图中使用了getdate()。我已经在我的edmx中导入了视图,并根据这个视图编写了查询。大多数查询与视图一起加入一个表并返回一个DTO。这些查询工作正常,并且当我在SQL事件探查器中对其进行概要分析时,速度很快(200ms)。由于查看重新计算,LinQ查询的持续时间很长
当我在连接表和视图上做一个组时,那么持续时间要长得多。奇怪的是,当我执行LinQ查询的时间非常长,但是当我在SQL Server Management Studio中自己执行生成的查询时,它非常快。我确定这不是由已经计算的缓存或执行计划造成的。 LinQ查询还为我提供了大量的读取和写入,而通过SQL Mgmt Studio进行的查询不会给我写入任何信息,而且读取次数也会减少很多。
我们推测,当通过LinQ执行查询时需要重新计算视图,而不是通过SQL Mgmt Studio执行查询时。
我试过的另一种方法是在数据库中创建一个存储过程。这个存储过程执行与LinQ生成的完全相同的查询。我已经将这个存储过程映射到了edmx中。当我再次通过LinQ调用存储过程时,持续时间非常长(7000毫秒),并且有很多读写操作。当我通过SQL Mgmt Studio执行它时,持续时间与预期的一样(200ms),读取次数少,没有写入。
有什么建议吗? 谢谢
你将不得不提供更多的信息给任何人说这个。例如:视图是怎样的?你的LINQ查询是怎样的? SQL的执行过程如何? – Steven 2010-09-22 10:12:50