SQL Server 表分区备忘
1.创建的代码如下:
CREATE PARTITION FUNCTION [01_SubjectiveScoreInfoPartitionFunction](NVARCHAR(26))
AS RANGE LEFT FOR VALUES
(
N'',
N'',
N'',...
) CREATE PARTITION SCHEME [01_SubjectiveScoreInfoPartitionSchema]
AS PARTITION [01_SubjectiveScoreInfoPartitionFunction] ALL TO ([PRIMARY]) CREATE CLUSTERED INDEX [IX_01_SubjectiveScoreInfo_Clustered] ON [01_SubjectiveScoreInfo] (QuestionGroupCode)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [01_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)
2.增加分区值的代码如下:
ALTER PARTITION FUNCTION [01_SubjectiveScoreInfoPartitionFunction] ()
SPLIT RANGE ('');
3.查询当前分区情况:
SELECT ps.name,pf.name,boundary_id,value
FROM sys.partition_schemes ps
INNER JOIN sys.partition_functions pf ON pf.function_id=ps.function_id
INNER JOIN sys.partition_range_values prf ON pf.function_id=prf.function_id
WHERE pf.name = '01_SubjectiveScoreInfoPartitionFunction'
4.创建单一文件组分区完整示例代码如下:
CREATE PROCEDURE [dbo].[spPartitionSubjectiveScoreInfo]
(
@CourseID AS NVARCHAR(2)
)
AS
BEGIN
BEGIN TRAN
BEGIN TRY
DECLARE @sql NVARCHAR(MAX)
DECLARE @QuestionGroupCodeList NVARCHAR(MAX)
SET @QuestionGroupCodeList = ''
SET @sql = N'
SELECT @QuestionGroupCodeList = @QuestionGroupCodeList + ''N''''''+[Code]+'''''',''
FROM [OMSDB].[dbo].[QuestionGroupInfo]
WHERE LEFT(RIGHT(Code,8),2)=@CourseID'
EXECUTE sp_executesql @sql,N'@QuestionGroupCodeList NVARCHAR(MAX) OUTPUT,@CourseID NVARCHAR(2)',
@QuestionGroupCodeList=@QuestionGroupCodeList OUTPUT,
@CourseID=@CourseID IF RIGHT(@QuestionGroupCodeList,1)=','
SET @QuestionGroupCodeList = LEFT(@QuestionGroupCodeList,LEN(@QuestionGroupCodeList)-1) SET @sql = N'
CREATE PARTITION FUNCTION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction](NVARCHAR(26))
AS RANGE LEFT FOR VALUES ( '+ @QuestionGroupCodeList +' )'
EXECUTE sp_executesql @sql SET @sql = N'
CREATE PARTITION SCHEME ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema]
AS PARTITION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction] ALL TO ([PRIMARY])'
EXECUTE sp_executesql @sql SET @sql = N'
CREATE CLUSTERED INDEX [IX_'+@CourseID+'_SubjectiveScoreInfo_Clustered] ON ['+@CourseID+'_SubjectiveScoreInfo] (QuestionGroupCode)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)'
EXECUTE sp_executesql @sql
COMMIT TRAN END TRY
BEGIN CATCH
PRINT 'Error:' + CONVERT(VARCHAR,ERROR_NUMBER()) + ',Message:' + error_message()
ROLLBACK TRAN
END CATCH
END
5.创建多文件组分区完整代码如下:
USE [OMSDB] DECLARE @dbPath NVARCHAR(MAX)
DECLARE @CourseID NVARCHAR(MAX)
SET @dbPath = 'D:\firstelite\data2'
SET @CourseID = '' DECLARE @sql NVARCHAR(MAX)
DECLARE @QuestionGroupCodes TABLE(QuestionGroupCode NVARCHAR(50))
DECLARE @QuestionGroupCodeList NVARCHAR(MAX) INSERT INTO @QuestionGroupCodes(QuestionGroupCode)
SELECT [Code] FROM [OMSDB].[dbo].[QuestionGroupInfo]
WHERE LEFT(RIGHT(Code,8),2)=@CourseID
ORDER BY [Code] ASC --删除所有文件组
SET @sql = N''
SELECT @sql = @sql + 'DBCC SHRINKFILE(N'''+QuestionGroupCode+''', EMPTYFILE);' + CHAR(13) + CHAR(10)
+ 'ALTER DATABASE OMSDB REMOVE FILE ['+QuestionGroupCode+'];' + CHAR(13) + CHAR(10)
+ 'ALTER DATABASE OMSDB REMOVE FILEGROUP FG' + QuestionGroupCode + ';' + CHAR(13) + CHAR(10)
FROM @QuestionGroupCodes
PRINT @sql
EXECUTE sp_executesql @sql --动态创建所有文件组
SET @sql = N''
SELECT @sql = @sql + 'ALTER DATABASE OMSDB ADD FILEGROUP FG' + QuestionGroupCode + ';' + CHAR(13) + CHAR(10)
+ 'ALTER DATABASE OMSDB ADD FILE(name=N'''+ QuestionGroupCode +''',filename=N'''+ @dbPath + '\' + QuestionGroupCode +'.ndf'',size=5MB,filegrowth=5MB) to filegroup FG' + QuestionGroupCode + ';' + CHAR(13) + CHAR(10)
FROM @QuestionGroupCodes
PRINT @sql
EXECUTE sp_executesql @sql --动态创建分区函数
SET @QuestionGroupCodeList = ''
SELECT @QuestionGroupCodeList = @QuestionGroupCodeList + 'N'''+[QuestionGroupCode]+''','
FROM @QuestionGroupCodes IF RIGHT(@QuestionGroupCodeList,1)=','
SET @QuestionGroupCodeList = LEFT(@QuestionGroupCodeList,LEN(@QuestionGroupCodeList)-1) SET @sql = N'
CREATE PARTITION FUNCTION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction](NVARCHAR(26))
AS RANGE LEFT FOR VALUES ( '+ @QuestionGroupCodeList +' )'
PRINT @sql
EXECUTE sp_executesql @sql --动态创建分区模式
SET @QuestionGroupCodeList = '[PRIMARY],'
SELECT @QuestionGroupCodeList = @QuestionGroupCodeList + '[FG'+[QuestionGroupCode]+'],'
FROM @QuestionGroupCodes IF RIGHT(@QuestionGroupCodeList,1)=','
SET @QuestionGroupCodeList = LEFT(@QuestionGroupCodeList,LEN(@QuestionGroupCodeList)-1) SET @sql = N'
CREATE PARTITION SCHEME ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema]
AS PARTITION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction] TO (' + @QuestionGroupCodeList + ')'
PRINT @sql
EXECUTE sp_executesql @sql --创建表分区
SET @sql = N'
CREATE CLUSTERED INDEX [IX_'+@CourseID+'_SubjectiveScoreInfo_Clustered] ON ['+@CourseID+'_SubjectiveScoreInfo]
(
QuestionGroupCode,
ID
)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)'
PRINT @sql
EXECUTE sp_executesql @sql --SET @sql = N'
-- CREATE CLUSTERED INDEX [IX_'+@CourseID+'_SubjectiveScoreInfoFlag_Clustered] ON ['+@CourseID+'_SubjectiveScoreInfoFlag]
-- (
-- [QuestionGroupCode]
-- ) WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
-- ON ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)'
--PRINT @sql
--EXECUTE sp_executesql @sql --其它相关语句
--DROP PARTITION SCHEME [01_SubjectiveScoreInfoPartitionSchema]
--DROP PARTITION FUNCTION [01_SubjectiveScoreInfoPartitionFunction] --ALTER DATABASE OMSDB ADD FILEGROUP FG11111111111500040401000301;
--ALTER DATABASE OMSDB ADD FILE(name=N'11111111111500040401000301',filename=N'D:\firstelite\data2\11111111111500040401000301.ndf',size=5MB,filegrowth=5MB); --DBCC SHRINKFILE(N'11111111111500040401000301', EMPTYFILE)
--ALTER DATABASE OMSDB REMOVE FILE [11111111111500040401000301]
--ALTER DATABASE OMSDB REMOVE FILEGROUP FG11111111111500040401000301;
6.MSDN示例代码如下:
A. 将已分区表或索引的一个分区拆分为两个分区
以下示例创建了一个分区函数,以将表或索引划分为四个分区。ALTER PARTITION FUNCTION
将某个分区拆分为两个分区,从而总共创建了五个分区。
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
--Split the partition between boundary_values 100 and 1000
--to create two partitions between boundary_values 100 and 500
--and between boundary_values 500 and 1000. ALTER PARTITION SCHEME SchemaForParirion NEXT USED 'PRIMARY'
ALTER PARTITION FUNCTION myRangePF1 ()
SPLIT RANGE (500);
B. 将已分区表的两个分区合并为一个分区
以下示例与上例创建同一分区函数,然后将两个分区合并为一个分区,从而总共创建了三个分区。
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
--Merge the partitions between boundary_values 1 and 100
--and between boundary_values 100 and 1000 to create one partition
--between boundary_values 1 and 1000.
ALTER PARTITION FUNCTION myRangePF1 ()
MERGE RANGE (100);
总结:
目前无法做如何删除分区,只能更改分区值,所以分区结构一旦创建,无法更改。
网上有人给出如下2种方案:
1.新建一张表,把数据插入新表,删除旧表,才能删除分区,然后重命名旧表,新建表分区。一般分区的表数据量都特别大,迁移数据耗时,本人没有试验。
2.按如下步骤,但我试了,没有成功,最后2步一直提示分区使用中,无法操作。
假设你创建的步骤是这样的:
1、CREATE PARTITION FUNCTION PF1(INT) AS RANGE LEFT FOR VALUES (1, 2, 3, 4)
2、CREATE PARTITION SCHEME PS1 AS PARTITION PF1 ALL TO ([PRIMARY])
3、CREATE CLUSTERED INDEX CIDX_X ON X(col1) ON PS1(col1)
删除的步骤应该是这样的:
1、DROP INDEX CIDX_X on X
2、CREATE CLUSTERED INDEX CIDX_X1 ON X(col1) ON [PRIMARY]
3、DROP PARTITION SCHEME PS1
4、DROP PARTITION FUNCTION PF1
5、DROP INDEX CIDX_X1 ON X
SQL Server 表分区备忘的更多相关文章
- SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...
- SQL Server表分区【转】
转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在 ...
- SQL Server表分区详解
原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...
- SQL Server表分区-水平分区
SQL Server表分区,sql server水平分区 转自:http://www.cnblogs.com/knowledgesea/p/3696912.html 根据时间的,直接上T-SQL代码 ...
- 8、SQL Server 表分区
什么是表分区?表分区其实就是将一个大表分成若干个小表.表分区可以从物理上将一个大表分成几个小表,但是逻辑上还是一个表.所以当执行插入.更新等操作的时候,不需要我们去判断应该插入或更新到哪个表中.只需要 ...
- SQL Server表分区案例
--学习创建表分区脚本/*SQL SERVER 2005中以上版本,终于引入了表分区,就是说,当一个表里的数据很多时,可以将其分拆到多个的表里,大大提高了性能.下面举例子说明之*/ --------- ...
- sql server 表分区
背景: 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的 ...
- SQL Server表分区(水平分区及垂直分区)
什么是表分区? 表分区分为水平表分区和垂直表分区,水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表:而垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字 ...
- SQL Server 表分区之水平表分区
什么是表分区? 表分区分为水平表分区和垂直表分区,水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表:而垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字 ...
随机推荐
- js上传文件(可自定义进度条)
//本地上传图片.语音 function rsc_UploadFile(file) { ]; //创建一个FormData空对象,然后使用append方法添加key/value var fd = ne ...
- 重载的方式写Python的post请求
#encoding=utf-8#__author__="Lanyangyang" import unittestimport requestsimport json # This ...
- Mysql text类型的最大长度
MySQL 3种text类型的最大长度如下: TEXT 65,535 bytes ~64kb MEDIUMTEXT 16,777,215 bytes ~16Mb LONGTEXT 4,294,967, ...
- 理解AXI Quad Serial Peripheral Interface(SPI) IP核
reference : PG153-AXI Quad SPI v3.2 LogiCORE IP Product Guide.pdf 在使用MicroBlaze过程中,调用了此IP,所以有必须仔细学 ...
- String 和StringBuffer的简单实用案例
3.现在有个字符串是按照如下格式保存的:“张三:90|李四:80|王五:100” 显示后的数据如下所示,按不同的人员显示: 姓名:张三,成绩是:90: 姓名:李四,成绩是:90: 姓名:王五,成绩是: ...
- ThreadPoolExcutor
先保存一个链接,后续更新 JAVA进阶----ThreadPoolExecutor机制 ExecutorService生命周期 理解ThreadPoolExecutor源码(一)线程池的corePoo ...
- Problem B 字符串类(I)
封装一个字符串类,用于存储字符串和处理的相关功能,支持以下操作: 1. STR::STR()构造方法:创建一个空的字符串对象. 2. STR::STR(const char *)构造方法:创建一个字符 ...
- <Dr.Elephant><How to tune ur application>
Why Dr.Elephant? Most of Hadoop optimization tools out there, but they are focused on simplifying th ...
- ubuntu下pyspark的安装
1.安装jkd1.8(这里不再描述) 2.直接在终端输入pip install pyspark(官网提供的最简单的一种安装方式) 过程如下: Collecting pyspark Downloadin ...
- synchronized(五)
package com.bjsxt.base.sync005;/** * synchronized的重入 * @author alienware * */public class SyncDubbo2 ...