Sql-Server
為什麼行溢出在 SQL Server 2005 上不起作用
我有一個 SQL Server 2005 數據庫,其中的表包含大約 860 列。除了 ID 列之外,所有其他列都是 varchar(N),其中 N 為 100 或 500。插入超過 8000 個字元的新行(通過 InfoPath 表單作為前端)時,SQL 伺服器返回以下錯誤:
Cannot create a row of size 11024 which is greater than the allowable maximum of 8060.
據我了解,由於Row Overflow,這不應該發生。
誰能提供一些關於為什麼會發生這種情況的見解?
這只是一個警告資訊。您可以使用未記錄的命令 DBCC IND 驗證行是否溢出到 ROW_OVERFLOW_DATA 頁。
就個人而言,這聽起來像是一張可以承受一些規範化的表格。
在 SQL 2005 中,超過 8,060 行大小限制可能會影響性能。這是因為 SQL Server 仍然保持每頁 8 KB 的限制。當 varchar、nvarchar、varbinary 或 sql_variant 列的組合超過此限制時,SQL Server 會將寬度最大的記錄列移動到另一頁,同時在原始頁上保留一個 24 字節的指針。
將大記錄移動到另一個頁面是動態發生的,因為記錄基於更新操作而被延長。縮短記錄的更新操作可能會導致記錄移回原始頁面。此外,在包含行溢出數據的大型記錄上查詢和執行其他選擇操作(例如排序或連接)會減慢處理時間。
添加:
將sp_tableoption 儲存過程’large value types out of row’ 選項設置為 ON 以將欄位儲存在頁面外。