我們有一個SQL數據庫,將被重新設計。我們將把某些列類型從INT更改爲TINYINT。通過這種轉換,我們可以減少數據庫磁盤的長度,或者這種轉換不會顯着減少磁盤空間?數據庫版本是SQL Server 2008 R2 32位。SQL Server重新設計,以減少磁盤空間
回答
我們打算將某些列類型從INT更改爲TINYINT。
注1(我的觀點):真正的問題不是關於磁盤上的存儲,而是關於緩衝池。
注2:選擇某列的正確的數據類型(前MyColumn
)影響以下數據庫結構的尺寸:
- 首先堆/聚簇索引的尺寸和然後
- {非聚集索引| xml索引|空間索引}大小如果
MyColumn
如果部分聚簇索引鍵,因爲聚簇索引鍵在每個非聚簇索引行中都被複制,則在每個主聚合中重複xml index(我不是100%確定的:在每一個輔助xml'FOR PROPERTY'索引)並在每個spatial index中進行復制。 - 非聚集索引的大小,如果
MyColumn
是索引的一部分(作爲密鑰或作爲覆蓋柱(SQL2005 +,見CREATE ... INDEX ... ON ... INCLUDE()
) - 如果
MyColumn
具有{PRIMARY KEY約束|。UNIQUE約束+ NOT NULL | UNIQUE索引+ NOT NULL},如果存在引用MyColumn
的外鍵,那麼這些FK必須具有相同的數據類型,如MyColumn
(PK/UQ)的最大長度,精度,比例和歸類。當然,這些FK也可以被索引聚簇/非聚簇索引) - 如果
MyColumn
包含在索引視圖中,則索引視圖可以具有唯一的聚簇索引和非聚簇索引,因此MyColumn
可以再次複製 - 如果
MyColumn
具有{一個PRIMARY KEY約束|一個UNIQUE約束+ NOT NULL |一個UNIQUE索引+ NOT NULL},則它們在引用此列的每個full-text index(見CREATE FULLTEXT INDEX ... KEY unique_index_name
)中都會被複制。 - 未涵蓋的主題:列存儲索引(SQL2012 +)。
所以,是的,更改某些列的數據類型可能會產生很大的影響。您可以使用以下腳本:
SELECT i.object_id, i.index_id, i.name, i.type_desc, ips.page_count, ips.*
FROM sys.indexes i
INNER JOIN sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') AS ips ON i.object_id = ips.object_id AND i.index_id = ips.index_id
WHERE i.name IN (
N'PK_PurchaseOrderHeader_PurchaseOrderID', ...
)
ORDER BY i.object_id, i.index_id;
瞭解在數據類型更改前後每個{堆結構|索引}有多少個頁面。注意3:如果你有Enterprise Edition
那麼你可以壓縮數據(link 1,link 2)。
對於從INT更改爲TINYINT的每列,它會將行大小減少3個字節。不過,您可能需要手動回收空間。重建聚集索引將做到這一點。
運行縮小命令不是必要的嗎? – miguelbgouveia
@miguelbgouveia你可以在之後運行shrink命令來減小物理* .mdf文件的大小,但是這會影響你的索引,除非你的磁盤空間非常短,否則我建議不要這樣做。減少行大小的好處是可以將更多的行放入數據頁面,並且減少長度讀取所需的磁盤IO。 – Meff
- 1. TFS 2015 - 磁盤空間持續減少
- 2. heroku計劃有多少磁盤空間?
- 3. 減少sql數據庫的磁盤空間
- 4. SQL列使用多少磁盤空間
- 5. SQL Server:關於改善磁盤空間
- 6. 重寫mysql選擇減少時間並將tmp寫入磁盤
- 7. 服務器中缺少磁盤空間
- 8. Windows Azure VM Server 2008 R2 - 缺少磁盤空間
- 9. Sql Server磁盤估計工具?
- 10. 重新設計我的數據庫,以減少查詢執行時間[SQL Server Express的]
- 11. PostORder遍歷計算磁盤空間
- 12. 估計MySql的磁盤空間
- 13. 計算可用磁盤空間
- 14. SQL Server 2005:刪除列佔用的磁盤空間
- 15. 非集羣式列存儲索引磁盤空間(SQL Server 2012)
- 16. 問題的磁盤空間SQL Server 2008中
- 17. SQL Server:查找數據庫磁盤空間使用情況
- 18. SQL Server 2014如何使用磁盤空間來存儲數據
- 19. 在sql server db中處理未使用的磁盤空間db
- 20. 如何增加SQL 2005 Server中數據庫的磁盤空間?
- 21. 廣告磁盤空間vs實際磁盤空間
- 22. Elasticsearch:如何減少磁盤使用量
- 23. 使用group by find top n,可以減少磁盤I/0嗎?
- 24. CreateFileMapping以「磁盤空間不足」結束
- 25. Neo4j,磁盤空間不足
- 26. 減少grid.arrange重複之間的空間
- 27. 如何減少sql server查詢時間
- 28. 重新分配SQL Server映像空間
- 29. 減少磁盤上創建的時間表MYSQL
- 30. OpenFeint磁盤空間佔用空間
沒有SQL Server 2004.但是,最近唯一一個名稱中有'R2'的是2008 R2。 –
它取決於行的現有大小 - 表中是否有任何可變長度的列?無論哪種方式,您必須計算每行的磁盤大小,然後計算建議更改行的磁盤大小,然後確定是否有更多的行適合每個頁面。 –
您是否將重新設計時間的成本與購買/更換更多磁盤的成本進行比較?如果磁盤空間是唯一的上升空間(內存也可能是或者索引大小),那麼它是值得的。 –