SQLServer 通用的分区增加和删除的算法
更新时间:2009年07月22日 08:40:10 作者:
本算法默认分去函数中已经包含了足够多的分区。不需要我们去动态的创建分区。
首先是将一个数据表加入到分区表的方法:
[dbo].[SP_Helper_Partition_Add]
@SrcTable nvarchar(256), 待加入的表
@DestTable nvarchar(256), 目标表
@idxOnDest nvarchar(1024), 目标表上的索引创建语句
@Partition_func_name nvarchar(256), 分区函数
@PartCol nvarchar(256), 分区的列
@SonIsPart tinyint=1, 待加入的表是否分区
算法如下:
获取到源表的分区列的值;
在源表上加上分区列值的唯一性限制;
然后确定是否有一个分区恰好能存放这个表;如果不存在,则返回;
在源表上创建和目标表一样的索引;
现在源表和目标结构一致,源表的内容能够存在目标分区上,使用alter table switch完成分区;
删除一个分区的算法
[dbo].[SP_Helper_Partition_Delete]
@SrcTable nvarchar(256), 从该表中删除分区
@IdxOnTable nvarchar(1024), 该表上的索引创建语句
@Part_func nvarchar(256), 分区函数名
@PartCol nvarchar(256), 分区列
@PartIndex int, 待删除分区的索引
@IdxIsPart tinyint 索引是否在另一个分区函数上分区
算法如下:
首先根据源表的表结构复制一分临时表的表结构;
获取待删除分区的边界值;
在临时表上创建限制;
在这个表上创建索引;
将指定分区使用alter switch交换到临时表上;
删除临时表
[dbo].[SP_Helper_Partition_Add]
@SrcTable nvarchar(256), 待加入的表
@DestTable nvarchar(256), 目标表
@idxOnDest nvarchar(1024), 目标表上的索引创建语句
@Partition_func_name nvarchar(256), 分区函数
@PartCol nvarchar(256), 分区的列
@SonIsPart tinyint=1, 待加入的表是否分区
算法如下:
获取到源表的分区列的值;
在源表上加上分区列值的唯一性限制;
然后确定是否有一个分区恰好能存放这个表;如果不存在,则返回;
在源表上创建和目标表一样的索引;
现在源表和目标结构一致,源表的内容能够存在目标分区上,使用alter table switch完成分区;
删除一个分区的算法
[dbo].[SP_Helper_Partition_Delete]
@SrcTable nvarchar(256), 从该表中删除分区
@IdxOnTable nvarchar(1024), 该表上的索引创建语句
@Part_func nvarchar(256), 分区函数名
@PartCol nvarchar(256), 分区列
@PartIndex int, 待删除分区的索引
@IdxIsPart tinyint 索引是否在另一个分区函数上分区
算法如下:
首先根据源表的表结构复制一分临时表的表结构;
获取待删除分区的边界值;
在临时表上创建限制;
在这个表上创建索引;
将指定分区使用alter switch交换到临时表上;
删除临时表
相关文章
sql server 2000阻塞和死锁问题的查看与解决方法
在实际引用当中,数据库阻塞和死锁在程序开发过程经常出现,下面通过介绍数据库阻塞和数据库死锁,并提供查看和解决阻塞和死锁的方法2014-01-01
解决连接Sql Server时报错:无法通过使用安全套接字层加密与SQL Server建立安全连接
这篇文章主要给大家介绍了关于解决连接Sql Server时报错:无法通过使用安全套接字层加密与SQL Server建立安全连接的相关资料,需要的朋友可以参考下2024-01-01
DataGrip 格式化SQL的实现方法(自定义Sql格式化)
DataGrip 是 JetBrains 发布的多引擎数据库环境,本文主要介绍了如何自定义Sql格式化风格,具有一定的参考价值,感兴趣的可以了解一下2021-09-09
Sql学习第一天——SQL 将变量定义为Table类型(虚拟表)
sql语句中的变量时通常我们定义的都是像char,varchar,nvarchar之类的,接下来教大家实现让变量作为一个像虚拟表一样,感性的各位可以参考下哈2013-03-03


最新评论