Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SSMS 2014中确定哪个查询更有效_Sql Server_Sql Server 2008_Ssms 2014 - Fatal编程技术网

Sql server 如何在SSMS 2014中确定哪个查询更有效

Sql server 如何在SSMS 2014中确定哪个查询更有效,sql-server,sql-server-2008,ssms-2014,Sql Server,Sql Server 2008,Ssms 2014,使用SSMS,如何确定哪个查询更有效?我更喜欢A,但我被告知在传输过程中每行执行一次子查询,因此B是首选的 A B 编辑:这是使用“设置统计信息”的统计信息: A B 因此,据我所知,效率没有差别 编辑2:我现在就明白了:因为子查询不是一个相关的子查询,所以它只执行一次。(感谢链接的@destination\u数据。)需要检查实际执行计划,但我怀疑这些计划将是相同的。这些子查询应该只执行一次,因为它们是不相关的,而且引擎很容易看到这些东西 如果你真的想进入细节检查这免费电子书从格兰特弗里奇 与S

使用SSMS,如何确定哪个查询更有效?我更喜欢A,但我被告知在传输过程中每行执行一次子查询,因此B是首选的

A

B

编辑:这是使用“设置统计信息”的统计信息:

A

B

因此,据我所知,效率没有差别


编辑2:我现在就明白了:因为子查询不是一个
相关的
子查询,所以它只执行一次。(感谢链接的@destination\u数据。)

需要检查实际执行计划,但我怀疑这些计划将是相同的。这些子查询应该只执行一次,因为它们是不相关的,而且引擎很容易看到这些东西


如果你真的想进入细节检查这免费电子书从格兰特弗里奇

与SSMS中的查询进行比较的方法:

在SSMS中,在单个选项卡上包含两个查询。选择查询菜单,然后选择“包括客户端统计信息”

注释掉其中一个查询,然后运行另一个查询。选择“客户端统计信息”选项卡并查看统计信息


现在注释掉另一个查询,取消注释第一个查询,然后再次运行。这两个统计信息都将显示在“客户统计信息”选项卡中,您可以很容易地看到哪一个更有效。

第一步不总是涉及到
解释计划
?我正在查看执行计划,但从数据来看,我不清楚哪一个更有效。这需要检查实际的执行计划,但我怀疑这些计划将是相同的。这些子查询应该只执行一次,因为它们不相关,而且引擎可以很好地看到这些东西。太晚了!本打算提到相关性,但@SeanLange抢先一步。有关更多信息,请参阅。一种方法是将两个查询放在同一个SSMS选项卡中。按Ctrl+L以查看执行计划。在每个计划的顶部,您要查找查询成本(相对于批次):xx%。在查询的不同版本之间,这将始终是100%。无论哪个数字较高,预计耗时最长。每个计划中的细节将帮助你找出为什么一个计划比另一个好/坏。
Update t set t.transmission_status_id = 
(select transmission_status_id from transmission_status where code = 'TRANSLATED')
from transmission t
where t.transmission_status_id = 
(select transmission_status_id from transmission_status where code = 'RECEIVED')
declare @transmission_status_TRANSLATED INT = (select transmission_status_id from transmission_status where code = 'TRANSLATED')
declare @transmision_status_RECEIVED INT = (select transmission_status_id from transmission_status where code = 'RECEIVED')

Update t set t.transmission_status_id = @transmission_status_TRANSLATED
from transmission t 
where t.transmission_status_id = @transmision_status_RECEIVED
Table 'transmission_status'. Scan count 1, logical reads 2, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'transmission_status'. Scan count 1, logical reads 2, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'transmission'. Scan count 1, logical reads 778, physical reads 0,
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'transmission'. Scan count 1, logical reads 778, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'transmission_status'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.