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

标签 sql-server sql-server-2008 ssms-2014

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

一个

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')

B

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

编辑:这是使用 SET STATISTICS ON 的统计信息:

一个。

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.

B

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.

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

编辑 2:所以我现在明白了:因为子查询不是 correlated 子查询,所以它只执行一次。 https://en.wikipedia.org/wiki/Correlated_subquery (感谢@destination_data 提供链接。)

最佳答案

这需要检查实际的执行计划,但我怀疑这些计划是相同的。这些子查询应该只执行一次,因为它们不相关,而且引擎非常适合查看这些内容。

如果您真的想了解详细信息,请查看 Grant Fritchey 的这本免费电子书。 https://www.red-gate.com/library/sql-server-execution-plans-2nd-edition

关于sql-server - 如何确定哪个查询在 SSMS 2014 中更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36652058/

相关文章:

SQL Server 存储过程连接字符串作为查询

sql-server - Azure移动服务脚本保存经纬度的地理信息

sql - 在 SQL Server 查询中返回月份名称

sql-server - 行大小开销

java - Update() 方法不适用于 ORACLE 数据库

SQL/SSMS - 部分数据从一个表移动到另一个表有两个条件

ssms-2014 - SSMS 2014 使用退格键时随机开始抛出 "Value does not fall within the expected range"

TSQL——优化器如何处理与未使用表的连接

sql-server - 在 SSMS 中隐藏报表服务作业

c++ - bcp_init rturns 访问冲突