2012-08-02 124 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中的查找時間是成本的地方,所以更新一列到自己應該很便宜。

相關問題