簡體   English   中英

什么是處理幾列更新的最佳方法

[英]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語句,該語句僅更新那些實際更改的列。

您無需再擔心任何這些細節。 所有為您照顧。 試試吧!

資源:

我只能想象獲取當前的數據庫記錄,逐字段與用戶輸入進行比較,然后僅更新更改的字段。

這將比僅在單個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM