什么';这是处理多个列的更新的最佳方法

本文关键字:更新 方法 最佳 处理 什么 | 更新日期: 2024-09-08 11:39:05

如果我有一个包含20个字段的配置文件表单,用户可以在页面上更新。如果用户只更改了两个字段,那么运行更新语句来更新每一列似乎是浪费。

我想知道,为了获得最佳性能,最好的处理方式是什么。

由于我只有20个领域,这并不是一个真正的问题,但我只是想知道未来的发展方向。

其他人都做什么?你只是更新那一行的每一列吗?

什么';这是处理多个列的更新的最佳方法

您的平均网络数据包长度为1500字节。这可能可以轻松地包含您的20个字段。因此,通过更新少于20个字段,您将不会节省任何网络负载。

SQL Server将数据存储在8000字节的页面中。如果更新1位,SQL Server将把它作为一个完全更改的页面:8000字节的数据。因此,只需更新不到20个字段,就不会节省磁盘活动。

优化性能通常是一个错误。如今数据库的速度非常快。优化为简单明了的代码。

实体框架(或其他ORM工具)等工具将免费为您处理此问题。

它们跟踪对象中发生了什么变化,并将发布一个定制的UPDATE语句,该语句将只更新那些实际发生变化的列。

你再也不用担心这些细节了。一切都为你照顾好了。试试看!

资源:

  • MSDN Data Developer Center中的实体框架-大量文档、白皮书、代码示例、视频和更多

  • 实体框架绝对入门指南

  • MSDN Library-实体框架概述(.NET 4)

  • ASP.NET站点-实体框架,包含大量关于如何将EF与ASP.NET(Webforms和MVC)应用程序一起使用的教程

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

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

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中的查找时间是成本所在,因此将列更新为自己应该非常便宜。