2016-04-04 41 views
4

我開發了一個.NET WPF應用程序,數據存儲由SQL Server Compact Edition處理。我注意到,當我壓縮獲得的SQL Server CE文件時,我經常壓縮到原始文件大小的5%。C#SQL Server精簡版:非常高的壓縮比

在這裏顯示一些明顯的無知的風險,這是預期的行爲?看起來,由於節省了大量的存儲空間,每次保存時我都應該壓縮這些文件(我還沒有考慮過這種性能影響)。數據庫大小可以從幾MB到最大4GB不等,儘管這很少見。我的數據存儲效率不高,或者爲什麼我壓縮時會獲得如此顯着的節省?我能做些什麼來總是獲得這種空間節省,而不必從外部壓縮SQL Server CE文件?

+0

這是我期待的初學者問題的類型。沒有無知會感到羞恥。這不是一個「我懶得在文檔中查找語法」問題。答案很明顯 - 但不適合初學者,只適用於瞭解數據庫內部工作原理的人。所以,不要感到羞愧,這實際上是個好問題。 – TomTom

回答

2

數據庫不應該被壓縮,因爲它會極大地影響檢索的性能。我會給你一個例子。

如果一個字段的長度爲200個字節,則數據庫保留200個字節以便在特定行上保存一個值。它可以計算總行大小加上所有字段的長度。

壓縮算法可能會將其中的實際值壓縮到幾乎沒有。但是,如果一個數據庫可以這樣做,它不能依靠計算磁盤上的位置(行號*行大小+列偏移量)。它首先需要解壓縮所有內容才能獲取特定行上特定列的值。從性能的角度來看,你不希望這樣做。

+1

最重要的是,數據庫通常有很多空的空間。預先分配一些預留插入等等。例如,指數不滿,所以插入並不總是觸發分頁(並且它們被組織在頁面中並分配它們)。 – TomTom

+0

感謝您的支持。你可能會推薦一些關於這方面的閱讀?我對SQL機制的理解非常有限。 –