Sql-Server
頻繁查詢表或單獨表中的 LOB
我在 Microsoft SQL Server 2012 伺服器中有一個名為 FinTrans 的表,在任何給定時間大約有 10K-30K 記錄,每天插入和刪除大約 2K 記錄。
該表有 3
nvarchar(max)
列保存事務的可能錯誤消息(3 種不同類型的消息,因此是單獨的列)。每當列出表的內容時,nvarchar(max)
也會讀取這些列。這些列是nvarchar(max)
因為它們的內容可能超過 4K,但機會很小(可能每周有一條記錄)。在這種情況下,最好將此列儲存在與 FinTrans 表 1:1 關係的單獨表中,還是應該將列保留在原處?
將此列儲存在與 FinTrans 表 1:1 關係的單獨表中是否更好,還是我應該將列保留在原處?
別管它。這很小,不值得增加複雜性。此外,即使表和 LOB 都更大,答案仍然是保留它。大型 LOB 將從行中移出,您可以為所有 LOB 設置一個配置選項以將其儲存在行外。您還可以將 LOB 表配置為儲存在單獨的文件組中。所以這裡沒有理由改變邏輯模型。
看:
行外的大值類型
1 = varchar(max)、nvarchar(max)、varbinary(max)、xml 和大型使用者定義類型 (UDT) 列在表中儲存在行外,帶有指向根的 16 字節指針。
0 = varchar(max)、nvarchar(max)、varbinary(max)、xml 和大 UDT 值直接儲存在數據行中,最大限制為 8000 字節,只要值可以適合記錄。如果該值不適合記錄,則將指針儲存在行內,其餘的將儲存在 LOB 儲存空間中的行外。0 是預設值。