SQL语句性能评估

时间:2012-12-19 10:08:36

标签: asp.net entity-framework sql-server-2005

我有.NET实体框架3.5生成的SQL语句(已经在EF 3.5上进行了优化,我们很快就会升级到4),并在2005 SQL 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不是BIG实体(我确实需要它的所有属性)。 有没有办法让它表现更好?

1 个答案:

答案 0 :(得分:1)

foreach循环平均迭代次数多少次?您可以先将数据加载到内存中,然后在缓存的数据上使用linq,这比foreach可能生成的多个sql语句要快得多。

这可能无法解决问题的根源,但只是根据我所看到的建议。

编辑:

您的原始问题与索引的注意事项有关。我会找出发送的实际查询是什么,然后在SQL Management Studio中自行运行它们,并选择生成执行计划。这样,您可以从SQL获得有关可能加速查询的索引的建议。

关于一般添加索引的注意事项,如果您担心插入/删除数据的速度,这只是一个问题。您拥有的索引越多,它就会减慢这些操作的速度。否则,添加您喜欢的所有索引。并确保您有一个聚簇索引,因为这可能会加快所有其他索引的速度。