2012-08-02 132 views
0

如果我有一个包含20个字段的配置文件表单,用户可以在页面上更新。如果用户只更改了两个字段,那么运行更新语句将会更新每一列,这似乎是一种浪费。什么是处理几列更新的最佳方式

我想知道什么是最好的方式来处理这个最好的表现。

由于我只有20个领域它不是一个真正的问题,但我只是想知道未来的发展,也许它可能会更多。

其他人都做了什么,你只是更新该行的每一列?

+0

什么是Db库? ASP.NET在这里不太相关。 – 2012-08-02 19:00:30

+0

我认为这类问题很可能不在stackoverflow上,因为它更像是一个讨论,而不是一个可以通过答案解决的实际问题 – 2012-08-02 19:00:33

+3

Entity Framework会为你处理这个事情,“免费” - 他们跟踪*什么*已经改变,并将发布UPDATE'语句,将*只更新那些实际已更改的列 - 并且您不必担心任何这些细节 – 2012-08-02 19:00:37

回答

4

类似实体框架(或其他ORM工具)的工具将为您处理这个“免费”。

他们跟踪对象中发生了什么变化,他们将发出一个量身定制的UPDATE语句,它只会更新实际更改的那些列。

您不必担心任何这些细节了。所有照顾你。尝试一下!

资源:

+0

完美的初学者有帮助的链接去吧:) – 2012-08-02 19:05:12

+0

使用像EF这样的ORM不是“免费的”。你会付出沉重的代价为最初的方便。我很惊讶你会主张使用它。 – Andomar 2012-08-02 19:12:20

+0

@Andomar:使用一个好的ORM并理解它的极限可以让你以80%,90%的方式轻松获得。方便。其余10-20%的功能都很难 - 无论您使用哪种库(或不使用)。 ORM不会改变这一点 - 但它们大大提高了开发人员的生产力,使“易”80%的功能成为可能。 – 2012-08-02 19:13:36

7

您的平均网络数据包长度为1500个字节。这可能很容易包含你的20个领域。因此,通过更新少于20个字段,您不会节省网络负载。

SQL Server以8000字节的页面存储数据。如果您更新1位,SQL Server会将其写为完全更改的页面:8000字节的数据。因此,通过更新少于20个字段,您不会保存磁盘活动。

优化性能往往是一个错误。现在数据库非常快。改为简单明了的代码。

0

我只能想象获取当前数据库记录,逐字段与用户输入进行比较,然后只更新已更改的字段。

这将比单个更新语句中更新所有字段更昂贵,所以我会选择单一更新。

0
CREATE PROC [dbo].[UpdateMe] 
(
    @pkey int, 
    @Col1 int = null, 
    @Col2 int = null, 
    ..., 
    @Col20 int = null 
) 
AS BEGIN 

    UPDATE [Table] 
      SET Col1 = ISNULL(@Col1,Col1), 
      Col2 = ISNULL(@Col2,Col2), 
      ... 
      Col20 = ISNULL(@Col20,Col20) 
    WHERE pkey = @pkey 

END 

跟踪哪些已经在客户端上更改并相应地送东西。 如果您担心通过电线发送太多,请使用命名参数并仅发送已更改的内容。由于程序中有默认设置,因此不需要花费任何费用。在sql中的查找时间是成本的地方,所以更新一列到自己应该很便宜。

相关问题