我正在处理一个表单,其中有很多字段供正在编辑现有记录的用户填写。用户可能只更改了一个字段,我通常会执行更新查询,设置所有字段的值,即使大多数字段没有更改。我可以进行某种跟踪以查看哪些字段实际上已更改,并仅更新少数更改的字段。更新整个记录中的所有字段与仅更新更改的字段之间是否存在性能差异?是否存在其他选择方法的原因?“霰弹枪”方法非常容易...
我正在处理一个表单,其中有很多字段供正在编辑现有记录的用户填写。用户可能只更改了一个字段,我通常会执行更新查询,设置所有字段的值,即使大多数字段没有更改。我可以进行某种跟踪以查看哪些字段实际上已更改,并仅更新少数更改的字段。更新整个记录中的所有字段与仅更新更改的字段之间是否存在性能差异?是否存在其他选择方法的原因?“霰弹枪”方法非常容易...
我会建议使用“霰弹枪”方法,但实际上这取决于很多因素,包括你对数据库的使用情况。
你必须考虑到UPDATE
语句不仅需要将新字段(即使未更改的字段)存储到表中,还需要:
无论如何,你都可以采用简单的方式,并测试任何性能问题以确保安全。
仅更新单个字段可能会导致性能下降。如果您正在使用预编译语句,则数据库已经编译了更新所有字段的查询计划。如果您开始更新随机字段,则每次更新时都必须解析查询,从而失去了预编译语句的好处。我不确定这在MySQL中会产生多少影响,但我知道在SQL Server和Oracle中可能会有很大影响。
当然,更新多个字段会有一些开销,但与维护关于哪些字段更改的状态的成本相比,这种开销是微不足道的。如果只有一个表格,我不必担心根据表单状态选择性地更新列。
此外,查看像Hibernate这样的数据库框架可能很有用,以抽象出其中的一些细节。
我会选择散弹枪方法,因为它易于理解和实现。性能损失应该可以忽略不计。