设为首页 收藏本站
查看: 1356|回复: 0

[经验分享] SQL Server表分区(一):基础知识和实现方式

[复制链接]

尚未签到

发表于 2015-6-28 15:24:21 | 显示全部楼层 |阅读模式
1、什么是表分区?
SQL Server使用三种不同类型的文件存储数据,它们分别是.mdf、.ndf和.ldf。主要数据存储在
.mdf文件中,比如表,索引,存储过程等。.ndf文件也用于储存这些数据。.ldf文件用于存储操作日志。
表默认存储在.mdf文件中。更新表时SQL Server会对表锁。那么其它的操作必须等待正在更新操作完成。
如果一个表很大,那么无论是查询操作还是更新操作,性能都会很差。如果将表分别存储在物理上独立但逻辑上连续的
分区中,那么SQL Server可以大幅优化查询操作和更新操作的性能。  2、如何实现表分区?
1)确定分区策略,即划分数据的逻辑规则。比如将整形值小于100的数据放在一个分区上,将大于等于100的数据放在第二个
分区上,等等。
SQL Server中的使用分区函数来实现分区策略:



CREATE PARTITION FUNCTION PF_Order(DATETIME)
AS RANGE RIGHT FOR VALUES
('20090101','20100101','20110101')  
2)确定分区存储架构,即划分数据的物理存储规则。最终分区可以存储在主文件组,即.mdf文件中,也可以存储在非主文件组,
即.ndf文件中。
SQL Server中的使用分区架构来实现分区存储架构:



CREATE PARTITION SCHEME PS_Order
AS PARTITION PF_Order
TO ([FG1],[FG2],[FG3],[FG4])  
3)将表创建在分区存储架构上,并指定使用哪一列做为划分数据的依据。注意做为划分数据依据的列必须在聚集索引中
在更新数据时,SQL Server首先使用列的数据做为参数调用分区函数确定应该将该数据存储在哪个文件组(逻辑分区),
然后将数据写入文件组对应的物理文件中。
  SQL Server中创建分区表:



CREATE TABLE dbo.[Order]
(
OrderID BIGINT IDENTITY(1,1),
OrderDate DATETIME NOT NULL,
CONSTRAINT PK_Order_OrderID_OrderDate PRIMARY KEY CLUSTERED(OrderID,OrderDate)
)
ON PS_Order(OrderDate)  
  下面是详细的示例代码:



--表分区测试代码
USE [master]
GO
--创建具有多个文件组的测试数据库
IF EXISTS(SELECT 1 FROM sys.databases WHERE [name]=N'TestTablePartitionDB')
BEGIN
    DROP DATABASE [TestTablePartitionDB]
END
CREATE DATABASE [TestTablePartitionDB]
ON PRIMARY
(
Name='PrimaryFG',
FileName='D:\Test\TablePartition\TestTablePartitionDB.mdf',
Size=5,
FileGrowth=1
),
FILEGROUP [FG1]
(
Name='FG1',
FileName='D:\Test\TablePartition\FG1.ndf',
Size=5,
FileGrowth=1
),
FILEGROUP [FG2]
(
Name='FG2',
FileName='D:\Test\TablePartition\FG2.ndf',
Size=5,
FileGrowth=1
),
FILEGROUP [FG3]
(
Name='FG3',
FileName='D:\Test\TablePartition\FG3.ndf',
Size=5,
FileGrowth=1
),
FILEGROUP [FG4]
(
Name='FG4',
FileName='D:\Test\TablePartition\FG4.ndf',
Size=5,
FileGrowth=1
)
USE TestTablePartitionDB
GO
--创建分区函数
CREATE PARTITION FUNCTION PF_Order(DATETIME)
AS RANGE LEFT FOR VALUES
('20090101','20100101','20110101')
--创建分区架构
CREATE PARTITION SCHEME PS_Order
AS PARTITION PF_Order
TO([FG1],[FG2],[FG3],[FG4])
--创建分区表
CREATE TABLE dbo.[Order]
(
OrderID BIGINT IDENTITY(1,1),
OrderDate DATETIME NOT NULL,
CONSTRAINT PK_Order_OrderID_OrderDate PRIMARY KEY CLUSTERED(OrderID,OrderDate)
)
ON PS_Order(OrderDate)
--测试数据的逻辑分区是哪个
SELECT $PARTITION.PF_Order('20090101')
--测试分区表的分区情况
SELECT partition_number,rows
FROM sys.partitions
WHERE [object_id]=object_id(N'dbo.[Order]')
--Drop index MyTable_IXC on MyTable with (Move To [Data Partition Scheme] (ID) )

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81219-1-1.html 上篇帖子: SQL Server 2005 Analysis Services数据挖掘算法扩展方法 下篇帖子: SQL Server的差异备份还原
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表