2011-01-12 32 views
15

考慮什麼關於SQL Server 2008 R2中存儲的字/小數精度​​MSDN狀態。SQL服務器NUMERIC /小數精度​​VS存儲

1至9中精確度是5個字節
的10至19是9個字節

精密所以,如果我的商業案例邏輯需要具有2個小數的數據類型和5位精度它使得如果我把它定義爲NUMERIC沒有實際性能或存儲差(5,2)NUMERIC(9,2)

一個考慮,我故意忽略的是隱含的檢查約束,我想最有可能把一個實際的檢查約束對列限制實際允許的範圍內。

這對於索引,查詢性能或系統的任何其他方面是否有所幫助?

+0

NUMERIC不確保在插入/更新的值中存在小數位數。 – 2011-01-12 18:40:51

回答

37

數字(5,2)允許數字最大爲999.99。如果您嘗試在其中插入1000.0,則會發生算術溢出。

數字(9,2)允許數字截至及包括9 999 999.99

記住,如果你打算永遠總結此值,允許額外的空間,否則,你會得到一個溢出或你」你需要做一個明確的演員。

它們佔用相同的字節數。由於它們是相同的存儲大小,他們在數據頁一樣,在內存中,在索引中,在網絡傳輸等

這是出於這個原因,我通常工作了,我需要什麼尺寸數存儲(如果使用數字),然後提高精度(也可能是縮放),這樣我就低於存儲大小增加點。 因此,如果我需要存儲高達9千萬的4位小數,那就是數字(12,4)。對於同一個存儲空間,我可以使用數字(19,6),併爲商業用戶宣佈他們真的需要在那裏存儲幾十億時提供一些安全空間。