1

我有 .NET Entity Framework 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 不是一个大实体(我确实需要它的所有属性)。有什么方法可以让它表现得更好吗?

4

1 回答 1

1

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

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

编辑:

您最初的问题与索引的考虑有关。我会找出发送的实际查询是什么,然后自己在 SQL Management Studio 中运行它们,并打开生成执行计划的选项。这样,您就可以从 SQL 获得有关索引的建议,这些建议可能会加快查询速度。

As for considerations about adding indexes in general, it's only an issue if you're worried about speed of inserting/deleting data. The more indexes you have the more it will slow those operations down. Otherwise, add all the indexes you like. And make sure you have a clustered index as that will potentially speed all your other indexes up.

于 2012-12-20T11:19:33.557 回答