[英]What's the best way to deal with the updating of several columns
如果我有包含20個字段的個人資料表單,則用戶可以在頁面上更新。 如果用戶僅更改兩個字段,則運行更新語句將更新每一列似乎是浪費的。
我想知道什么是處理此問題以獲得最佳性能的最佳方法。
由於我只有20個領域,這並不是一個真正的問題,但是我只是想知道將來可能會有更多的發展。
其他人都在做什么,您只是更新該行的每一列嗎?
您的平均網絡數據包長1500個字節。 可能輕松包含您的20個字段。 因此,通過更新少於20個字段,您將不會節省網絡負載。
SQL Server將數據存儲在8000字節的頁面中。 如果更新1位,則SQL Server會將其寫為完整更改的頁面:8000字節的數據。 因此,通過更新少於20個字段,您不會節省磁盤活動。
優化性能通常是一個錯誤。 這些天數據庫非常快。 而是針對簡單明了的代碼進行優化。
諸如Entity Framework之類的工具(或其他ORM工具)將為您免費處理此問題。
他們跟蹤對象中發生了什么更改,並且將發出量身定制的UPDATE
語句,該語句僅更新那些實際更改的列。
您無需再擔心任何這些細節。 所有為您照顧。 試試吧!
資源:
MSDN數據開發人員中心中的實體框架 -大量的文檔,白皮書,代碼示例,視頻等
ASP.NET網站-實體框架,其中包含有關如何將EF與ASP.NET(Webforms和MVC)應用程序一起使用的大量教程
我只能想象獲取當前的數據庫記錄,逐字段與用戶輸入進行比較,然后僅更新更改的字段。
這將比僅在單個update語句中更新所有字段更加昂貴,因此我會選擇單個update。
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中的查找時間是開銷所在,因此將列更新為其本身應該非常便宜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.