tsql命令优化

tsql命令优化,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的桌子上有一百万行。 如果100K记录的RunId字段=37, 那么这两个中哪一个更快 update _PECO_Detail set RunId = 37 where Runid <> 37 update _PECO_Detail set RunId = 37 update\u PECO\u详细信息集RunId=37,其中RunId为37 更新_PECO_详细信息集RunId=37 如果900K记录的RunId已经为37,那么第一个命令会更快吗 update _PECO_D

我的桌子上有一百万行。 如果100K记录的RunId字段=37, 那么这两个中哪一个更快

update _PECO_Detail set RunId = 37 where Runid <> 37
update _PECO_Detail set RunId = 37 
update\u PECO\u详细信息集RunId=37,其中RunId为37
更新_PECO_详细信息集RunId=37
如果900K记录的RunId已经为37,那么第一个命令会更快吗

update _PECO_Detail set RunId = 37 where Runid <> 37
update _PECO_Detail set RunId = 37 
update\u PECO\u详细信息集RunId=37,其中RunId为37
更新_PECO_详细信息集RunId=37

索引确实存在于字段RunId上,第一个更快,因为它只更新非
37
的行——根据您的描述,这是900000行,但比1000000行更好。如果没有这样的行,那么这两个行的性能将非常相似


由于锁定和日志记录的开销,更新大量行的成本很高。SQL Server即使在没有更改的情况下也会更新行,因此强烈建议在更新之前进行筛选。有时,只重新创建表更有效。

第一个更快,因为它只更新不属于
37
的行——根据您的描述,这是900000行,但比1000000行更好。如果没有这样的行,那么这两个行的性能将非常相似


由于锁定和日志记录的开销,更新大量行的成本很高。SQL Server即使在没有更改的情况下也会更新行,因此强烈建议在更新之前进行筛选。有时,只需重新创建表就更有效。

因此,无论已经有37行的行数有多少,通过筛选器更新总体性能会更好……对吗?我不确定这是真的。但我正在尝试。带筛选器的命令运行了1个多小时。我阻止了它。不是,我正在尝试另一种方式。我们看看会发生什么…@KamMistry。可能有一些边缘情况。如果百万分之一的值是37,那么测试可能比更新额外行的小开销要长。或者,如果过滤器比整数比较复杂。但总的来说,过滤效果更好。因此,无论已经有37行的行数有多少,通过过滤器更新总体性能会更好……对吗?我不确定这是真的。但我正在尝试。带筛选器的命令运行了1个多小时。我阻止了它。不是,我正在尝试另一种方式。我们看看会发生什么…@KamMistry。可能有一些边缘情况。如果百万分之一的值是37,那么测试可能比更新额外行的小开销要长。或者,如果过滤器比整数比较复杂。但总的来说,过滤效果更好。