Sql-Server

為什麼導入的txt表會佔用這麼多空間

  • December 17, 2016

我有一個.txt儲存大小為 1253 MB 的文件。將其導入 SQL Server 2016 後,該表在磁碟上佔用 1680 MB。為什麼儲存空間增長如此之快?

我沒有做任何數據轉換,使用純char格式儲存數據。我讀取了txt文件的數據字典,如果變數的長度最多為n,那麼我使用varchar(3). 如果文件是固定長度的n,那麼我使用char(n).

大約 4 到 5 列密集填充,所有其他列都非常稀疏。對於稀疏列,只有 1% 的行不為空。

以下是創建表和導入數據的程式碼:

CREATE TABLE table1 (
var1 char(12),      var2 char(6),      var3 varchar(12),       var4 varchar(3),
var5 varchar(3),    var6 varchar(4),   var7 char(1),           var8 char(1),
var9 char(2),       var10 char(6),     var11     varchar(8),   var12 varchar(12),
var13 char(6),      var14 varchar(12), var15 varchar(14),var16 varchar(12),
var17 varchar(12),  var18 varchar(12), var19 varchar(12),var20 varchar(12),
var21 varchar(12),  var22 varchar(12));

如何減少儲存空間?

這是來自命令的儲存資訊sp_spaced

名稱表1
行 22260960
保留 1721240 KB
數據 1721128 KB
索引大小 24 KB
未使用 88 KB

SQL Server 中的列存在元數據儲存成本,您不必在平面文件中付費。使用壓縮可以減少這種成本。從行壓縮實現

它減少了與記錄相關的元數據成本。此元數據是有關列、它們的長度和偏移量的資訊。在某些情況下,元數據成本可能大於舊的儲存格式。

嘗試使用行或頁面壓縮來壓縮表,看看這是否會減少 SQL Server 所需的空間。

ALTER TABLE table1 REBUILD WITH (DATA_COMPRESSION = ROW);

根據我的經驗,壓縮既可以提高查詢性能,也可以降低查詢性能。這取決於您正在執行的數據和查詢。您可能需要在空間和查詢性能之間進行權衡。

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