![]() |
1
1
糟糕的计划很可能是参数嗅探的结果: http://blogs.msdn.com/b/queryoptteam/archive/2006/03/31/565991.aspx 不幸的是,没有什么好的通用方法(据我所知)来避免L2S的这种情况。 context.ExecuteCommand命令 (“sp\u recompile…”)将是一个丑陋的,但可能的解决办法,如果查询不经常执行。 稍微改变查询以强制重新编译可能是另一种情况。
将查询的部分(或全部)移动到视图*、函数*或存储过程*数据库端将是另一种解决方法。
顺便问一下,您是否尝试过更新相关表格的统计数据?SQL Server的自动更新统计信息并不总是能完成这项工作,因此,除非您有计划的工作要做,否则可能值得考虑编写脚本和计划更新统计信息。。。根据需要上下调整样本大小也会有所帮助。
有一些方法可以通过在所涉及的表上添加*(或删除*)正确的索引来解决这个问题,但是在不知道底层数据库模式、表大小、数据分布等的情况下,很难给出更具体的建议。。。
|
![]() |
2
1
Linqpad提供给您的SQL可能并不完全是发送到DB的SQL。 以下是我的建议:
需要寻找的关键事项:
如果您使用的是SQL2008,查看计划通常会告诉您是否缺少索引,应该添加索引以加快查询速度。 另外,您是否正在对其他用户加载的数据库执行操作? |
![]() |
3
1
乍一看,有很多连接,但我只能看到一件事,即在我面前有一个模式的情况下,立即减少数量…看起来你不需要AccountSummary。
|
![]() |
4
1
|
![]() |
5
0
检查SSMS会话和应用程序之间是否具有相同的事务隔离级别。这是我所见过的相同查询之间的巨大性能差异的最大罪魁祸首。
另一方面,如果您是手工制作SQL,您可以尝试将条件从WHERE子句移到适当的JOIN子句中。这实际上改变了SQLServer执行查询的方式,并可以生成更有效的执行计划。我见过这样的情况:将筛选器从where子句移到JOINs中会导致sqlserver在执行计划的早期对表进行筛选,并显著地改变了执行时间。 |
![]() |
Jack Skeletron · T-SQL三表求和 7 年前 |
![]() |
CSK · 列出sql server中存储过程中的存储过程 7 年前 |
![]() |
DRT · 从文本字段中提取多个日期 7 年前 |
![]() |
ihatemash · 确定可以合并哪些行的SQL查询 7 年前 |
![]() |
Shawn · 使用WinZip命令行的SQL Server作业 7 年前 |