【SQLSERVER】从数据库文件mdf中拆分ndf的方法和利弊
一、数据文件格式
SQLSERVER中,数据库的文件后缀有3种:mdf、ndf、ldf。
如下图所示,DW_TEST.mdf、DW_TEST_HIS.ndf、DW_TEST.ldf 属于同一个数据库TEST。
其中 mdf 是主数据文件,每个数据库有且只能有一个;ndf 是次要数据文件 ;ldf 是日志文件。
二、如何从主数据文件mdf中拆分出ndf
1,添加新文件组,创建ndf文件
1.1,右键数据库 → 属性 → 文件 → 添加文件
1.2,这边新建一个HIS的文件组,对应的ndf命名为 DW_TEST_HIS。
2,这个时候,ndf文件已经生成,接下来就是根据需要把数据从DW_TEST.mdf 中移到 DW_TEST.ndf.
迁移数据到ndf有两种方法:
一种是通过重新建表,把表的归属文件组改为ndf对应的文件组,这边是HIS,然后把旧表的数据写入新表。
另一种方式是通过,重建聚集索引的方式,将表的归属文件组改为 HIS,不再赘述。
三、拆分ndf的结果分析和利弊
建了一个测试数据库DW_TEST2作为拆分对象,拆分的结果作为DW_TEST。再往两个库写入一样的数据,从下图的结果可以看出 DW_TEST2.mdf(8.37G) 拆分成了 DW_TEST.mdf(4.06G) 和 DW_TEST_HIS.ndf(4.3G),算上日志文件,拆分前后,数据库总大小不变。
优点:分出了一个ndf文件,可以放在别的硬盘,在存储上起到一定程度的减压,和提高I/0并发的优化作用,可以作为一种数据库的优化策略;
缺点:多出一个ndf文件,增加了数据库管理上的压力。