Sql-Server

頻繁查詢表或單獨表中的 LOB

  • May 28, 2018

我在 Microsoft SQL Server 2012 伺服器中有一個名為 FinTrans 的表,在任何給定時間大約有 10K-30K 記錄,每天插入和刪除大約 2K 記錄。

該表有 3nvarchar(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 是預設值。

sp_tableoption

引用自:https://dba.stackexchange.com/questions/208045