SQL Server 2005 创建分区表

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

背景:随着公司的业务迅猛发展,导致部分数据表的数据量剧增(T_ZK_C0075ALog、T_ZK_C007ALog),无法满足用户对查询效率、性能的要求。

意义:在于将大数据从物理上切割为几个相互独立的小部分,从而在查询时只取出其中一个或几个分区,减少影响的数据;另外,对置于不同文件组的分区,并行查询的性能也要高于对整个表的查询性能。

事实上,在SQL Server 2005 中就已经包含了分区功能,甚至在2005之前,还存在一个叫做“Partitioned Views”的功能,能通过将同样结构的表Union在一个View中,实现类似现在分区表的效果。而在SQL Server 2008 中,分区功能得到了显著加强,使得我们不仅能够对表和索引做分区,而且允许对分区上锁,而不是之前的全表上锁。


相关知识参考:

1、对于SQL SERVER中分区表的理解和相关理论知识,请参考文章:

T-SQL查询进阶--理解SQL SERVER中的分区表

理解SQL SERVER中的分区表(提供SQL语句)

2、对于SQL Server数据库中,关于文件的存放方式,以及文件和文件组,请参考文章:

SQL Server中数据库文件的存放方式,文件和文件组

3、对于创建百万或千万级的测试数据表,建议采用 递归CTE插入。请参考文章:

SQL Server 2012中快速插入批量数据的示例及疑惑

SQL2008使用CTE递归查询批量插入500万数据


创建分区表的步骤:

一、创建与删除分区函数;

二、创建与删除文件组;

三、创建与删除文件;

四、创建与删除分区架构;

五、查看分区是否成功;


一、创建与删除分区函数

1.1创建分区函数

复制代码
CREATE PARTITION FUNCTION F_Partition_tzkc0075aLog_Range(datetime)
AS RANGE LEFT FOR VALUES (
'20130131 23:59:59.997',   -- 2013 年 1 月
'20130228 23:59:59.997',   -- 2013 年 2 月
'20130331 23:59:59.997',   -- 2013 年 3 月
'20130430 23:59:59.997',    -- 2013 年 4 月
'20130531 23:59:59.997',   -- 2013 年 5 月
'20130630 23:59:59.997',   -- 2013 年 6 月
'20130731 23:59:59.997',   -- 2013 年 7 月
'20130831 23:59:59.997',   -- 2013 年 8 月
'20130930 23:59:59.997',   -- 2013 年 9 月
'20131031 23:59:59.997',   -- 2013 年 10 月
'20131130 23:59:59.997',   -- 2013 年 11 月
'20131231 23:59:59.997'    -- 2013 年 12 月*/
)
复制代码

注:1、创建分区函数语法中,LEFT | RIGHT 关键字用于指定boundary_value [ ,...n ]中的每个boundary_value 属于每个边界值间隔的哪一侧(左侧还是右侧)。如果未指定,则默认值为 LEFT。

2、很明显,这个分区函数创建了12个分区,因为此时 n=12,所以实际分区总数是 n+1=13。

1.2删除分区函数

DROP PARTITION FUNCTION F_Partition_tzkc0075aLog_Range;
GO

二、创建与删除文件组

2.1、创建文件组

复制代码
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG1_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG2_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG3_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG4_TZKC0075Log;

ALTER DATABASE DB_ZK3 ADD FILEGROUP FG5_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG6_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG7_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG8_TZKC0075Log;

ALTER DATABASE DB_ZK3 ADD FILEGROUP FG9_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG10_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG11_TZKC0075Log;
ALTER DATABASE DB_ZK3 ADD FILEGROUP FG12_TZKC0075Log;
复制代码

2.2、删除文件组

复制代码
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG1_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG2_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG3_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG4_TZKC0075Log;

ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG5_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG6_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG7_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG8_TZKC0075Log;

ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG9_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG10_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG11_TZKC0075Log;
ALTER DATABASE DB_ZK3 REMOVE FILEGROUP FG12_TZKC0075Log;
复制代码

2.3、查询文件组

select name,type_desc,physical_name,state_desc,size,growth 
from sys.database_files

三、创建与删除文件

3.1、删除文件

ALTER DATABASE DB_ZK3 REMOVE FILE F4_TZKC0075Log;

3.2、创建文件

复制代码
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB1_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB1_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG1_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB2_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB2_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG2_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB3_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB3_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG3_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB4_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB4_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG4_TZKC0075Log];

ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB5_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB5_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG5_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB6_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB6_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG6_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB7_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB7_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG7_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB8_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB8_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG8_TZKC0075Log];

ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB9_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB9_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG9_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB10_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB10_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG10_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB11_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB11_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG11_TZKC0075Log];
ALTER DATABASE DB_ZK3 ADD FILE(NAME=N'FB12_TZKC0075Log', FILENAME=N'D:\DB_ZK3\FB12_TZKC0075Log.ndf', SIZE=30720KB, FILEGROWTH=10% ) 
TO FILEGROUP [FG12_TZKC0075Log];
复制代码

四、创建与删除分区架构

4.1、创建分区架构

复制代码
CREATE PARTITION SCHEME [S_Scheme_TZKC0075Log] 
AS
PARTITION F_Partition_tzkc0075aLog_Range
TO ([FG1_TZKC0075Log],[FG2_TZKC0075Log],[FG3_TZKC0075Log],[FG4_TZKC0075Log],[FG5_TZKC0075Log],
    [FG6_TZKC0075Log],[FG7_TZKC0075Log],[FG8_TZKC0075Log],[FG9_TZKC0075Log],[FG10_TZKC0075Log],
    [FG11_TZKC0075Lot],[FG12_TZKC0075Log],[PRIMARY]);
复制代码

注意:建议将主数据文件 [PRIMARY] 放在分区最后!

4.2 删除分区架构

DROP PARTITION SCHEME [S_Scheme_TZKC0075Log]; 

五、查看分区是否成功

复制代码
select convert(varchar(50), ps.name) as partition_scheme, p.partition_number,  
convert(varchar(10), ds2.name) as filegroup, 
 convert(varchar(19), isnull(v.value, ''), 120) as range_boundary,  
str(p.rows, 9) as rows from sys.indexes i 
 join sys.partition_schemes ps on i.data_space_id = ps.data_space_id 
 join sys.destination_data_spaces dds on ps.data_space_id = dds.partition_scheme_id  
join sys.data_spaces ds2 on dds.data_space_id = ds2.data_space_id  
join sys.partitions p on dds.destination_id = p.partition_number 
and p.object_id = i.object_id and p.index_id = i.index_id  
join sys.partition_functions pf on ps.function_id = pf.function_id 
 LEFT JOIN sys.Partition_Range_values v on pf.function_id = v.function_id 
and v.boundary_id = p.partition_number - pf.boundary_value_on_right  
WHERE i.object_id = object_id('PartitionedTable')  --  PartitionedTable 对应具体的分区表名称
and i.index_id in (0, 1)  
order by p.partition_number
复制代码




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2013/04/28/3049440.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
5月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
111 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
60 6
|
4月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
371 1
|
3月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
469 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
305 3
|
4月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
4月前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
76 2