减少sql数据库的磁盘空间

时间:2016-12-16 11:02:41

标签: sql-server sql-server-2012

我有一个拥有2TB数据的数据库,我想通过删除一些行并删除一些无用的列来将其减少到500Go,但我有其他优化的想法,我之前需要回答一些问题。

我的数据库有一个.mdf文件和另外9个.ndf文件,每个文件的初始大小为100Go。

  1. 我应该将每个.ndf文件的initiale大小减少到50Go吗?这个操作会影响我的数据吗?
  2. 删除索引有助于减少空间?
  3. PS:我的数据库只包含一个表,它有一个聚簇索引和另外两个非聚簇索引,

    • 我想删除两个非聚集索引
    • 删除insertdate列

    如果您有任何其他优化想法,那将非常有帮助

1 个答案:

答案 0 :(得分:1)

在删除任何索引之前运行这两个视图。

sys.dm_db_index_usage_stats

sys.dm_db_index_operational_stats中

如果他们中的任何一个用于支持查询,他们会通知您。你想要的最后一件事是删除索引并开始在2TB表上看到全表扫描。

如果您无法将表格拆分为关系模型,请尝试将其作为初学者。

  1. 检查您的数据类型。
  2. - 您可以使用CHAR替换带VARCHAR或NCHAR的NVARCHAR吗? (他们占用了一半的空间)

    - 你的桌子经历了很多更新或很多插入(上面的视图会告诉你这个)?如果更新很少,则考虑将CHAR字段更改为VARCHAR字段。大量更新可能会导致页面拆分并导致页面填充性不佳。

    - 检查仅存储没有时间的日期的列不会声明为日期时间

    - 检查数值字段中的值范围,即尝试使用Smallint而不是Int。

    1. 查看桌面上的活动,更新&插入行为。如果活动意味着很少重新安排页面,那么请考虑增加填充因子。

    2. 查看计划缓存,了解如何查询表,如果大量查询关注表的特定部分,则实现过滤索引。

    3. 您的聚集索引是否独一无二?如果没有,那么SQL会创建一个“隐藏的额外整数列”,在引擎盖下创建唯一性。