Sql-Server

將數據從 Oracle 移動到 SQL Server:表大小優化

  • September 28, 2012

我正在使用 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 下空間的兩倍)

有關更多詳細資訊,請查看以下兩個資源:

嘗試非 unicode 字元串:varchar而不是nvarchar. OracleVARCHAR2不是 unicode 數據類型,nvarchar每個字元佔用 2 個字節而不是 1 個字節。

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