2014-05-18 58 views
0

我讀到SQL服務器的行壓縮功能通過僅使用存儲給定值所需的字節來減少存儲行所需的空間。如果不壓縮,int列需要4個字節。只有存儲數字1或100萬時,我們才需要全部4個字節。在打開行壓縮的情況下,sql server會查看存儲的實際值並計算所需的存儲量。瞭解SQL服務器中簡單行壓縮的概念

我不明白 - 爲什麼1和1mn需要全部4個字節,爲什麼其他大於1的數字需要更少的內存?

編輯 -它從書中採取:提供業務智能與SQL Server 2008

行壓縮減少了存儲數據的行所需的空間。它只用 使用存儲給定值所需的字節。例如,在沒有行壓縮的情況下,類型爲int的 列通常佔用4個字節。如果我們存儲的號碼是 1或100萬,那麼這是真的。 SQL Server分配足夠的空間來存儲數據類型可能的最大值 。 打開行壓縮時,SQL Server會進行更智能的空間分配。 它查看給定行中給定列的實際值,然後 確定表示該值所需的存儲空間。這是完成到最接近的 整個字節。 當然,這種增加的複雜性會增加一些開銷,因爲在表中插入或更新數據 。當從 表中檢索到數據時,它還會增加更少的開銷。在大多數情況下,此額外處理所花費的時間可以忽略不計。實際上,在某些情況下,保存磁盤讀取和磁盤寫入時間甚至可能大於數據壓縮所需的計算時間。

+0

你從哪裏閱讀了關於如何存儲整數的部分? –

+0

當你認爲錯誤的事情你不能問爲什麼它是錯的。 –

+0

@MikaelEriksson - 請參閱我的編輯信息來源。 – Steam

回答

1

1和100萬隻是行壓縮關閉時需要4個字節的值的示例。這並不意味着其他數字需要更少的空間。

1和100萬可能被挑選爲例子,因爲1很小,一百萬很大。

如果行壓縮處於關閉狀態,int將佔用4個字節,無論它具有什麼值。

2

你對此有錯誤的認識。請仔細閱讀the docs

+0

好文件! –

+0

謝謝Endrju。請閱讀我的編輯。 – Steam