什么';这是处理多个列的更新的最佳方法
本文关键字:更新 方法 最佳 处理 什么 | 更新日期: 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中的查找时间是成本所在,因此将列更新为自己应该非常便宜。