Sql-Server
為什麼 SQL Server 沒有列級鎖定?
據我所知,最低級別的鎖定是行級的
但是我看不出它不能具有列級鎖定的原因
假設 2 個查詢同時更新 2 個不同的列。
那麼為什麼它不能發生呢?為什麼每次更新都必須至少鎖定行級?
這種行為告訴我應該將表拆分為較小的表,這樣會發生較少的行級鎖定
我不正確嗎?
此功能可能存在。它會消耗資源並使架構複雜化。所以這是一個必須做出的權衡。
出於同樣的原因,一些數據庫的方向相反:它們鎖定在頁面或表級別。MongoDB 甚至為整個數據庫設置了全域寫鎖!這無疑使一些物理實現問題變得更加容易。
SQL Server 的鎖定模型已經非常複雜,並且根據我的經驗,它很好地解決了實際場景。我不確定列級鎖定是否會使它成為更好的產品(即使開發人員的時間對 Microsoft 來說是免費的)。
有幾次我認為需要列級鎖定,後來我意識到這是一個糟糕的模式設計。需要鎖定的列應該放在單獨的表中。