Sql-Server
將數據從 Oracle 移動到 SQL Server:表大小優化
我正在使用 SSIS 從 Oracle 將數據載入到 SQL Server 數據庫。我移動的一個表在 Oracle 下的大小為 4 MB,但當載入到 SQL Server 時,大小增長到 7.96 MB!
我根據插入的行分析了大小(以 KB 為單位)並得到以下結果:
Rows SQL Server Oracle 10 16 64 50 48 64 100 88 64 150 128 128 200 168 128 250 208 128 300 248 128 350 288 192 400 328 192 450 368 192 500 408 192 550 448 256 600 488 256 650 528 256 700 568 256 750 648 320 800 688 320
我懷疑應該重新調整 SQL Server 中使用的數據類型。以下是 Oracle 和 SQL Server 中使用的表結構的摘要:
Oracle_DataType SQL_Server_Datatype #OfColumns DATE datetime 2 INTEGER int 1 NUMBER(1,0) numeric(1, 0) 3 NUMBER(15, 5) numeric(15, 5) 52 NUMBER(2, 0) numeric(2, 0) 1 NUMBER(3, 0) numeric(3, 0) 5 NUMBER(3, 1) numeric(3, 1) 1 NUMBER(5, 0) numeric(5, 0) 1 NUMBER(5, 2) numeric(5, 2) 4 NUMBER(6, 0) numeric(6, 0) 1 NUMBER(8, 3) numeric(8, 3) 2 NUMBER(8, 4) numeric(8, 4) 1 NUMBER(9, 0) numeric(9, 0) 7 NUMBER(9, 3) numeric(9, 3) 6 VARCHAR2(1) nvarchar(1) 1 VARCHAR2(12) nvarchar(12) 1 VARCHAR2(13) nvarchar(13) 1 VARCHAR2(14) nvarchar(14) 1 VARCHAR2(16) nvarchar(16) 3 VARCHAR2(20) nvarchar(20) 1 VARCHAR2(24) nvarchar(24) 1 VARCHAR2(80) nvarchar(80) 1
您是否知道是否可以減小 SQL Server 中的大小,使其至少與 Oracle 中的大小相匹配?
謝謝,
感謝 Piotr 的建議。我發現真正導致 Oracle 和 SQL Server 之間如此大的差異的原因!這是由於 NUMBER / NUMERIC 數據類型(注意 85 列使用 NUMBERC/NUMBER 數據類型)!
雖然 NUMBER(p,s) 數據的儲存大小在 Oracle 下取決於儲存數字的值,但 NUMERIC(p,s) 數字的大小在 SQL Server 上仍然保持不變,無論值是多少!
例如:
- 在 Oracle NUMBER(5,2) 列下,我們儲存以下值:(123.45、12.23 和 1)儲存空間分別為 4 字節、3 字節和 1 字節,總計8 字節
- 但是,在 SQL Server NUMERIC(5,2) 列下,所有三個值所需的儲存空間為 5 個字節,總計15 個字節……(幾乎是 Oracle 下空間的兩倍)
有關更多詳細資訊,請查看以下兩個資源:
- 聯機叢書中的十進制和數字 (Transact-SQL)
- NUMBER 的大小(對於 Oracle)
嘗試非 unicode 字元串:
varchar
而不是nvarchar
. OracleVARCHAR2
不是 unicode 數據類型,nvarchar
每個字元佔用 2 個字節而不是 1 個字節。