加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 重建重组表某个分区索引

发布时间:2020-12-12 13:26:20 所属栏目:MsSql教程 来源:网络整理
导读:测试: --DROP TABLE [DemoDB].[dbo].[Address]SELECT * INTO [DemoDB].[dbo].[Address] FROM [AdventureWorks2014].[Person].[Address]GOUSE [DemoDB]GO--创建分区函数CREATE PARTITION FUNCTION [PF_ID](INT) AS RANGE LEFT FOR VALUES (10000,15000)GO--

测试:

--	DROP TABLE [DemoDB].[dbo].[Address]

SELECT * INTO [DemoDB].[dbo].[Address] FROM [AdventureWorks2014].[Person].[Address]
GO

USE [DemoDB]
GO

--创建分区函数
CREATE PARTITION FUNCTION [PF_ID](INT) 
AS RANGE LEFT FOR VALUES (10000,15000)
GO

--创建分区方案
CREATE PARTITION SCHEME [PS_ID] 
AS PARTITION [PF_ID] TO ([PRIMARY],[FG],[FG1] )
GO

--表分区
ALTER TABLE [dbo].[Address]
ADD CONSTRAINT [PK_Address] PRIMARY KEY CLUSTERED ([AddressID] ASC)
ON [PS_ID]([AddressID])
GO

--删除1/4的数据,使其产生碎片
DELETE FROM [dbo].[Address] WHERE [AddressID]%4=0


--查看表的分区
SELECT * FROM sys.partitions WHERE [object_id]=OBJECT_ID('Address')

SELECT index_id,partition_number,avg_fragment_size_in_pages,page_count,alloc_unit_type_desc
FROM sys.Dm_db_index_physical_stats(Db_id(),Object_id('Address'),NULL,NULL)


--现在重建表第三个分区的索引,再看看,碎片减少了。
ALTER INDEX [PK_Address] ON [dbo].[Address] 
REBUILD PARTITION = 3
GO


--重建表所有分区的索引,可以使用不同的数据压缩。分区3 none是没有压缩的。
ALTER INDEX [PK_Address] ON [dbo].[Address] 
REBUILD PARTITION = ALL
WITH 
(
	DATA_COMPRESSION = NONE ON PARTITIONS (3),DATA_COMPRESSION = ROW ON PARTITIONS (2),DATA_COMPRESSION = PAGE ON PARTITIONS (1)
)
GO


--以行方式压缩分区三(行压缩较久)
ALTER INDEX [PK_Address] ON [dbo].[Address] 
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW ON PARTITIONS (3))
GO




--同样,重组也适合
ALTER INDEX [PK_Address] ON [dbo].[Address] 
REORGANIZE PARTITION = 3 
GO
ALTER INDEX [PK_Address] ON [dbo].[Address] 
REORGANIZE PARTITION = ALL
GO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读