我有由.NET Entity Framework3.5生成的SQL语句(已经在EF3.5上做了优化,我们很快就会升级到4),并在2005SQL Server上运行。我知道有很多文章大体上讨论SQL性能,但我没有找到解决我的问题的具体方法。对于这种情况,我需要一个参考或解决方案:在ASP.NET应用程序中,有一个表包含某些信息(大约6-7列),当用户对表执行排序操作时,检索信息需要7-15秒(...这是糟糕的性能,因为应用程序是业务内部的)。
我运行了文章中的usp_Worst_TSQL:http://www.databasejournal.com/features/mssql/article.php/3802936/Finding-the-Worst-Performing-T-SQL-Statements-on-an-Instance.htm,我了解了性能问题的来源:有几个使用WHERE、INNER & LEFT JOIN和ORDER BY子句的嵌套查询。
在语句中创建有关SQL语句子句的索引时有哪些注意事项?什么时候需要创建复合索引?
编辑:我设法找到了问题所在。我在代码中有这个LINQ和foreach循环,它需要整整3秒钟才能获得数据:
foreach (string status in searchObj.Statuses)
{
from f in tblFormsQO
where f.tblFormStatus.Count > 0 && f.tblFormStatus.Count(s => s.StatusDate == null) == 0
&& f.tblFormStatus.OrderByDescending(s => s.StatusDate).FirstOrDefault().CurrentStatus.CodeDesc == status
select f
}现在,f不是一个大的实体(我确实需要它的所有属性)。有没有办法让它表现得更好?
发布于 2012-12-20 19:19:34
foreach循环平均迭代了多少次?您可以先将数据加载到内存中,然后对缓存的数据使用linq,这将比foreach可能生成的多个sql语句快得多。
这可能不能解决问题的根源,但只是一个我可以根据我所看到的给出的建议。
编辑:
您最初的问题与索引的考虑因素有关。我会找出实际发送的查询是什么,然后自己在SQL Management Studio中运行它们,并打开生成执行计划的选项。这样,您就可以从SQL获得有关索引的建议,这可能会加快查询速度。
至于添加索引的一般考虑因素,只有当您担心插入/删除数据的速度时,这才是一个问题。拥有的索引越多,这些操作的速度就越慢。否则,添加您喜欢的所有索引。并确保您有一个聚集索引,因为这可能会加快所有其他索引的速度。
https://stackoverflow.com/questions/13949909
复制相似问题