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在执行计划的早期对表进行筛选,并显著地改变了执行时间。 |
Roy · SQL C#:结果未返回任何内容。读取() 7 年前 |
Pablo · 如何在Regex.replace中仅替换捕获组? 9 年前 |
rudimenter · 为什么以下代码编译和执行成功? 10 年前 |
Rachel · 是否有任何原因在该代码块的List<T>中找不到现有项? 10 年前 |
oshirowanen · 动态超级链接 10 年前 |
sab669 · SharpSVN不迭代所有子目录和文件 11 年前 |
ForeverWintr · Excel中的奇怪行为。工作表。单元格[行,列] 11 年前 |