SQL Server与stmtcompleted和直接查询之间的持续时间

时间:2017-09-29 09:20:09

标签: sql-server axapta microsoft-dynamics

然后我在我的应用程序中跟踪tracert关于一个查询:

enter image description here

如您所见,查询读取表中的所有寄存器,结果对持续时间有很大影响。

但是当我尝试直接执行查询时,结果是另一个......出了什么问题?

enter image description here

2 个答案:

答案 0 :(得分:4)

您从SSMS执行了另一个查询。

profiler中显示的查询是存储过程的一部分,有8个参数。 您执行的是具有常量的查询,该常量具有另一个执行计划,因为所有常量都已知并且估计是基于这些已知值完成的。

当你的sp语句被执行时,计划是为上帝知道的嗅探参数而创建的,这个计划与你在SSMS中的不同。

从SSMS中箭头的强弱来看,很明显你查询不会执行7.954.449次读取。

如果您想在Profiler中看到实际的执行计划,您应该选择相应的事件(Showplan XML Statistics Profile)。

答案 1 :(得分:0)

是的,有两种不同的查询。 Axapta使用共同的占位符。您的查询使用文字常量。

查询中的forceLiterals提示使Axapta查询与您的SSMS示例类似。默认的Axapta提示为forcePlaceholders

占位符的主要目标是使用来自多个客户端的不同常量优化大量类似查询。主要是由于使用了查询计划缓存。

另请参阅forceLiterals的注入警告: https://msdn.microsoft.com/en-us/library/aa861766.aspx