我有一个拥有2TB数据的数据库,我想通过删除一些行并删除一些无用的列来将其减少到500Go,但我有其他优化的想法,我之前需要回答一些问题。
我的数据库有一个.mdf文件和另外9个.ndf文件,每个文件的初始大小为100Go。
PS:我的数据库只包含一个表,它有一个聚簇索引和另外两个非聚簇索引,
如果您有任何其他优化想法,那将非常有帮助
答案 0 :(得分:1)
在删除任何索引之前运行这两个视图。
sys.dm_db_index_usage_stats
sys.dm_db_index_operational_stats中
如果他们中的任何一个用于支持查询,他们会通知您。你想要的最后一件事是删除索引并开始在2TB表上看到全表扫描。
如果您无法将表格拆分为关系模型,请尝试将其作为初学者。
- 您可以使用CHAR替换带VARCHAR或NCHAR的NVARCHAR吗? (他们占用了一半的空间)
- 你的桌子经历了很多更新或很多插入(上面的视图会告诉你这个)?如果更新很少,则考虑将CHAR字段更改为VARCHAR字段。大量更新可能会导致页面拆分并导致页面填充性不佳。
- 检查仅存储没有时间的日期的列不会声明为日期时间
- 检查数值字段中的值范围,即尝试使用Smallint而不是Int。
查看桌面上的活动,更新&插入行为。如果活动意味着很少重新安排页面,那么请考虑增加填充因子。
查看计划缓存,了解如何查询表,如果大量查询关注表的特定部分,则实现过滤索引。
您的聚集索引是否独一无二?如果没有,那么SQL会创建一个“隐藏的额外整数列”,在引擎盖下创建唯一性。