gpt4 book ai didi

sql-server - SQL Server 性能 - IF Select + Update 与 Update

转载 作者:行者123 更新时间:2023-12-01 23:07:40 24 4
gpt4 key购买 nike

我正在编写一个大脚本,其中充满了每天运行的更新语句。其中一些更新会影响其他行,而不会影响其他行。

我相信不会影响任何内容的更新语句不是很好的做法,但我的问题是:

  • 这会对性能产生多严重的影响?这与使用 select 语句并仅在 select 获取某些内容时更新有很大不同吗?

谢谢你,蒂亚戈

最佳答案

首先,在并发情况下,SELECT 后跟 UPDATE 几乎总是不正确的。除非事情在 SERIALIZABLE 隔离级别下运行,否则不能保证行在 SELECT 和 UPDATE 之间不会更改。

其次,对于有行需要更新的情况,SELECT + UPDATE 的成本根据定义高于仅 UPDATE。

最后,对于没有行来更新的情况,通过 UPDATE 定位它们的成本通常与通过 SELECT 定位它们的成本相同,因此您没有获得任何事物。我说“经常”,而不是“总是”,因为查询优化器可能会考虑不同的更新策略和选择策略,并且更新扫描与读取扫描在不同的锁定(并发)规则下发生。

可能有意义的是拥有一个非常便宜的 SELECT,可以避免昂贵的 UPDATE,即使不是 100% 准确。 SELECT 和 UPDATE 之间的条件可能会有很大差异,只要您没有得到任何漏报(SELECT 说不应该有任何行,但 UPDATE 会找到行,如果它已运行)和 false 的数量正数很低(SELECT 说有行,但更精确/昂贵的 UPDATE 检查实际上没有找到任何行)。

归根结底,这是一个优化问题,所有优化问题都是从测量开始的。首先找到昂贵的UPDATE,然后开始修改。

关于sql-server - SQL Server 性能 - IF Select + Update 与 Update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com