首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语句性能检查

SQL语句性能检查
EN

Stack Overflow用户
提问于 2012-12-19 18:08:36
回答 1查看 115关注 0票数 1

我有由.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秒钟才能获得数据:

代码语言:javascript
复制
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不是一个大的实体(我确实需要它的所有属性)。有没有办法让它表现得更好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-20 19:19:34

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

这可能不能解决问题的根源,但只是一个我可以根据我所看到的给出的建议。

编辑:

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

至于添加索引的一般考虑因素,只有当您担心插入/删除数据的速度时,这才是一个问题。拥有的索引越多,这些操作的速度就越慢。否则,添加您喜欢的所有索引。并确保您有一个聚集索引,因为这可能会加快所有其他索引的速度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13949909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档