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

sqlserver 分区

发布时间:2020-12-12 14:23:31 所属栏目:MsSql教程 来源:网络整理
导读:SQL SERVER 创建表分区步骤 1. 创建分区函数 2. 创建分区架构 3. 创建表分区 创建如下数据库文件组的路径 -- 1 .创建数据库文件组分区IF EXISTS (SELECT name FROM sys.databases WHERE name = N'PartDB')DROP DATABASE PartDBGOCREATE DATABASE [PartDB]ON
SQL SERVER 创建表分区步骤

1. 创建分区函数

2. 创建分区架构

3. 创建表分区


创建如下数据库文件组的路径



-- 1 .创建数据库文件组分区

IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'PartDB')
DROP DATABASE PartDB
GO

CREATE DATABASE [PartDB]
ON PRIMARY
(
NAME= 'PartDB_PFG',FILENAME= 'I:sqlserverPartitionPrimaryPartDB_PFG.mdf',SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=1MB
),FILEGROUP [PartDB_FG01]
(
NAME= 'PartDB_FG01',FILENAME= 'I:sqlserverPartitionfilegroup01PartDB_FG01.mdf',MAXSIZE=100MB,FILEGROWTH=5MB
),FILEGROUP [PartDB_FG02]
(
NAME= 'PartDB_FG02',FILENAME= 'I:sqlserverPartitionfilegroup02PartDB_FG02.mdf',FILEGROUP [PartDB_FG03]
(
NAME= 'PartDB_FG03',FILENAME= 'I:sqlserverPartitionfilegroup03PartDB_FG03.mdf',FILEGROUP [PartDB_FG04]
(
NAME= 'PartDB_FG04',FILENAME= 'I:sqlserverPartitionfilegroup04PartDB_FG04.mdf',FILEGROUP [PartDB_FG05]
(
NAME= 'PartDB_FG05',FILENAME= 'I:sqlserverPartitionfilegroup05PartDB_FG05.mdf',FILEGROWTH=5MB
)
LOG ON
(
NAME= 'PartDB_LOG',FILENAME= 'I:sqlserverPartitionlogfilePartDB_LOG.ldf',SIZE=1MB,FILEGROWTH=1MB
)


USE PartDB
GO

-- 2. 创建范围分区函数

CREATE PARTITION FUNCTION pf_tab_ProductKey(int)
AS RANGE LEFT
FOR VALUES (300,400,500,600);



-- 3. 创建分区架构

CREATE PARTITION SCHEME schema_pf_tab_ProductKey
AS PARTITION pf_tab_ProductKey
TO(PartDB_FG01,PartDB_FG02,PartDB_FG03,PartDB_FG04,PartDB_FG05)


-- 4. 创建表

CREATE TABLE [dbo].[partTable](
	[ProductKey] [int] NULL,[CustomerKey] [int] NULL,[OrderDateKey] [int] NULL,[UnitPrice] [money] NULL,[UnitPriceDiscountPct] [float] NULL,[dizhi] [varchar](50) NULL
) ON schema_pf_tab_ProductKey(ProductKey) --指定分区方案,以ProductKey为分区列

INSERT INTO partTable SELECT * from Sales_DW.dbo.tab --我从另一个数据库表取数据,60398条数据




-- 5. 查看使用情况 
SELECT * FROM sys.partition_functions
SELECT * FROM sys.partition_schemes
SELECT * FROM sys.partition_range_values
SELECT * FROM sys.partition_parameters
SELECT * FROM sys.partitions

-- 6. 新增分区方案。先指定下一个文件组,再添加划分范围
-- 分割时分区锁定,数据迁移重组,消耗大量IO
ALTER PARTITION SCHEME schema_pf_tab_ProductKey NEXT USED 'PartDB_FG05'

ALTER PARTITION FUNCTION pf_tab_ProductKey()
SPLIT RANGE (700)


-- 7. 合并分区(相当删除)
--如果分区函数定义的是left,左分区合并到右分区;right,右分区合并到左分区
ALTER PARTITION FUNCTION pf_tab_ProductKey()
MERGE RANGE (700)






/*

【创建分区函数】
CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ] 
FOR VALUES ( [ boundary_value [,...n ] ] ) 
[ ; ]

partition_function_name:
	是分区函数的名称。分区函数名称在数据库内必须唯一,并且符合标识符的规则。
	
input_parameter_type:
	是用于分区的列的数据类型。当用作分区列时,除 text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名数据类型或 CLR 用户定义数据类型外,所有数据类型均有效。
	
	实际列(也称为分区列)是在 CREATE TABLE 或 CREATE INDEX 语句中指定的

boundary_value:
	为使用 partition_function_name 的已分区表或索引的每个分区指定边界值。
	如果 boundary_value 为空,则分区函数使用 partition_function_name 将整个表或索引映射到单个分区。
	只能使用 CREATE TABLE 或 CREATE INDEX 语句中指定的一个分区列。

	指定 boundary_value 提供的值的数目,不能超过 999
	
LEFT | RIGHT:	
	指定当间隔值由 数据库引擎 按升序从左到右排序时,boundary_value [,...n ] 属于每个边界值间隔的哪一侧(左侧还是右侧)。
	如果未指定,则默认值为 LEFT



【创建个分区架构】
CREATE PARTITION SCHEME partition_scheme_name
AS PARTITION partition_function_name
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [,...n ] )
[ ; ]

partition_scheme_name
	分区方案的名称。分区方案名称在数据库中必须是唯一的,并且符合标识符规则。

partition_function_name
	使用分区方案的分区函数的名称。分区函数所创建的分区将映射到在分区方案中指定的文件组。
	partition_function_name 必须已经存在于数据库中。

ALL
	指定所有分区都映射到在 file_group_name 中提供的文件组,或映射到主文件组(如果指定了 [PRIMARY]。
	如果指定了 ALL,则只能指定一个 file_group_name。

file_group_name | [ PRIMARY ] [,...n]
	指定用来持有由 partition_function_name 指定的分区的文件组的名称。
	file_group_name 必须已经存在于数据库中。

*/

(编辑:李大同)

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

    推荐文章
      热点阅读