我有一个linqtosql查询过滤并按日期列排序,需要20秒才能运行。当我直接在DB上运行生成的sqlquery时,它会在0秒内返回。
var myObjs = DB.Table
.Where(obj => obj.DateCreated>=DateTime.Today)
.OrderByDescending(obj => obj.DateCreated);
该表只有100,000条记录,并且DateTime列已编入索引。
另一个在linqtosql表现不满的长线中。但是这个太糟糕了,我确信我一定做错了。
答案 0 :(得分:1)
我怀疑不同之处在于,尽管运行生成的查询只需要0秒,但这是因为如果您使用的是Enterprise Manager,它实际上并没有显示所有结果。只需获取(并反序列化)100,000个结果的所有数据可能需要花费大量时间,但您的手动查询可能只显示前20个匹配或类似的内容。
如果您在.NET中运行相同的SQL并使用DataReader
来获取所有数据,那么需要多长时间?
如果运行启用了性能分析的服务器,那么从LINQ到SQL执行查询需要多长时间?
答案 1 :(得分:1)
谢谢你们......
问题是我的,而不是linq。为简洁起见,我缩短了问题中的查询,但实际上有另一个过滤器已应用于非索引列。添加索引解决了问题。
通过我的循环是什么,正如Jon Skeet建议的那样,在Sql Mgmt studio中运行查询给出了一种错误的信心,因为查询被分页,很快就返回前20行,让我思考林奇应该受到指责。所以索引问题只出现在linq而不是sql mgmt studio中。
答案 2 :(得分:0)
我的查询中看不到任何错误。很高兴看到Linq生成的T-SQL。你试过吗?