我有一个非常简单的LINQ查询:
List<table> list = ( from t in ctx.table
where
t.test == someString
&& t.date >= dateStartInt
&& t.date <= dateEndInt
select t ).ToList<table>();
被查询的表有大约三千万行数据,但是列“test”和“date”已经建立了索引。当应该返回大约5000行时,需要几分钟才能完成查询。
我也检查了LINQ生成的SQL命令。如果我在SQL Server上运行该命令,只需要2秒钟就可以完成。
这里LINQ出了什么问题?这只是一个非常简单的查询,没有任何联接。
以下是SQL Profiler显示的查询:
exec sp_executesql N'SELECT [t0].[test]
FROM [dbo].[table] AS [t0]
WHERE ([t0].[test] IN (@p0)) AND ([t0].[date] >= @p1)
AND ([t0].[date] <= @p2)',
N'@p0 nvarchar(12),@p1 int,@p2 int',@p0=N'123test',@p1=110801,@p2=110804
编辑:
真的很奇怪。在测试时,我注意到现在速度快多了。LINQ查询现在需要大约20000行数据3秒钟,这是相当不错的。
更加令人困惑的是: 我们的生产服务器上也有同样的情况。一小时前它非常慢,现在又变得很快了。由于我是在开发服务器上进行测试的,所以没有对生产服务器做任何更改。我能想到的唯一可能出现问题的原因是两个服务器都是虚拟化的,并与许多其他服务器共享SAN。
我该如何确定这是否是问题的原因?
table
的构造函数里有什么内容?它的属性设置器中是否有任何操作? - Tim Rogers