3.7 移动数据到文件组

3.7 移动数据到文件组


3.7.1 移动普通表

  在某些实际案例中,有一些表和索引被频繁访问,可以考虑将这些表和索引隔离到另一块物理磁盘以加速访问的性能。

  如果一个新表或者新建的非聚集索引,可以在 CREATE TABLE 或 CREATE INDEX 时使用 ON 参数指定文件组,而该文件组可以将数据文件指定到特定的物理磁盘。

CREATE TABLE [dbo].[EmpTable](

[EmpID] [varchar](10) NULL,

[DepID] [nvarchar](10) NULL,

[Title] [nvarchar](10) NULL

) ON [PRIMARY]


CREATE NONCLUSTERED INDEX [IX_EmpTable] ON [dbo].[EmpTable]

( [EmpID] ASC ) ON [PRIMARY]


  对于已经存在的聚集索引,只能通过在 T-SQL 语句中使用 DROP_EXISTING = ON 参数进行重建,从而将表移动到另一个文件组。

CREATE CLUSTERED INDEX [PK_Customer] ON [dbo].[Customer]

(

[CustomerNum] ASC

) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)

ON [2ndFileGroup]


  对于非聚集索引,除了使用 T-SQL 语句,还可以直接在索引的属性页面中修改文件组。

wKioL1Zi5JbRB6ZrAABb4lfhmzM136.png



3.7.2 迁移到已分区表

  如果需要将普通表迁移到分区表,通过重建聚集索引可以实现。 SSMS 也提供了图形辅助界面,方便对普通表进行分区操作。

  在需要分区的表上单击右键,然后在右键菜单中依次选择“存储”、“创建分区”。

wKioL1Zi502hXERdAACgCTraARU725.png


  在“欢迎使用创建分区向导”页,单击“下一步”。

wKioL1Zi4yvA1eSJAAEEWn_utzQ215.png


  在“选择分区列”,选择一个可以用于创建分区函数的列。如果该表中还存在着一些非聚集索引,建议同时勾选下面的“将存储区中的所有非唯一索引和唯一索引与索引分区列对齐”选项。

wKioL1Zi4yvQTEY1AABmlDgKkEk595.png


  新建一个分区函数,或者选择一个现有的分区函数。

wKiom1Zi4sCwbuVRAABMm4k9FIA557.png


  新建一个分区方案,或者选择一个现有的分区方案。

wKiom1Zi4sCiYvgoAABLhysy7hI625.png


  在“映射分区”页而,为分区指定边界。单击“设置边界”按钮,可以根据列的数据类型提示输入一个开始值和结束值。单击“预计存储空间”按钮,可以查看预估的行数、所需空间。

wKioL1Zi4yzTYdrSAABizN_Ob1U969.png


wKiom1Zi4sHD_5NxAAAVgnUtSdc990.png


  完成上述设置后,出现“选择输出选项”页面。可以选择创建脚本、立即运行或安排作业。

wKioL1Zi4y3wANnRAABcVkF1mkc030.png


  检查摘要信息。确认无误后,按“完成”按钮开始执行。

wKiom1Zi4sHipDNsAABQ4TctXhQ346.png


  执行完毕,可以查看执行过程的报告。

wKioL1Zi4y6hHzKjAABh0vMeiGk462.png


  上述图形界面的操作,实际上也是通过重新生成聚集索引的方式将普通表迁移到已分区表。生成的脚本如下所示。

USE [SQLDB01]

GO

BEGIN TRANSACTION


CREATE PARTITION FUNCTION [PartFunc](datetime) AS RANGE RIGHT FOR VALUES (N'2013-01-01T00:00:00', N'2014-01-01T00:00:00')


CREATE PARTITION SCHEME [PartScheme] AS PARTITION [PartFunc] TO ([FG2012], [FG2013], [FG2014])


CREATE CLUSTERED INDEX [IX_Orders_OrderNum] ON [dbo].[Orders]

(

[OrderNum] ASC

) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = ON, 

ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)

ON [PartScheme]([OrderDate])


COMMIT TRANSACTION



本文出自 “SQLServer2014丛书” 博客,谢绝转载!

你可能感兴趣的:(索引,文件组)