我得到了一个linqtosql查询,通过一个数据列进行过滤和排序,运行时间为20秒。
var myObjs = DB.Table
.Where(obj => obj.DateCreated>=DateTime.Today)
.OrderByDescending(obj => obj.DateCreated);该表只有100,000条记录,并且对DateTime列进行了索引。
这只是一长串linqtosql性能抱怨中的又一个。但是这个太糟糕了,我想我一定是做错了什么。
发布于 2009-07-18 23:24:51
我怀疑不同之处在于,尽管运行生成的查询只需要0秒,但这是因为如果您使用Enterprise Manager之类的工具,它实际上不会向您显示所有结果。仅获取(和反序列化) 100,000个结果的所有数据可能会花费大量时间,但您的手动查询可能只显示前20个命中或类似的结果。
如果您在.NET中运行相同的SQL并使用DataReader获取所有数据,那么需要多长时间?
如果在开启分析的情况下运行服务器,那么从LINQ到SQL执行查询需要多长时间?
发布于 2009-07-18 23:42:22
谢谢你们..。
问题是我的,而不是linq的,为了简洁起见,我缩短了问题中的查询,但实际上有另一个过滤器已经应用于非索引列。添加索引解决了这个问题。
然而,正如Jon Skeet所建议的,在Sql Mgmt studio中运行查询给人一种错误的信心,因为查询被分页,并且非常快地返回前20行,这让我认为linq是罪魁祸首。因此,索引问题只出现在linq中,而不出现在sql mgmt studio中。
发布于 2009-07-18 23:27:58
我看不出您的查询中有任何错误。如果能看到Linq生成的T-SQL,那就太好了。你试过了吗?
https://stackoverflow.com/questions/1148856
复制相似问题