SQL Server 分区表补充说明
分区教程参阅:http://database.9sssd.com/mssql/art/951
切换分区(归档):http://technet.microsoft.com/zh-cn/library/ms191160(v=sql.105).aspx
补充:
- 数据更新时,会根据分区依据,数据在文件组间移动
- 归档时,外键约束将阻止归档(同文件组的不同表间归档)
理想方案:正常分区,定期结转
USE
[master]
GO
CREATE
DATABASE
Sales
ON
PRIMARY
(
NAME=N'Sales',
FILENAME=N'd:\temp\data\Primary\Sales.mdf',
SIZE=3MB,
MAXSIZE=100MB,
FILEGROWTH=10%
),
FILEGROUP
FG1
(
NAME
=
N'File1',
FILENAME
=
N'd:\temp\data\FG1\File1.ndf',
SIZE
= 1MB,
MAXSIZE
= 100MB,
FILEGROWTH
= 10%
),
FILEGROUP
FG2
(
NAME
=
N'File2',
FILENAME
=
N'd:\temp\data\FG2\File2.ndf',
SIZE
= 1MB,
MAXSIZE
= 100MB,
FILEGROWTH
= 10%
),
FILEGROUP
FG3
(
NAME
=
N'File3',
FILENAME
=
N'd:\temp\data\FG3\File3.ndf',
SIZE
= 1MB,
MAXSIZE
= 100MB,
FILEGROWTH
= 10%
)
LOG
ON
(
NAME
=
N'Sales_Log',
FILENAME
=
N'd:\temp\data\Primary\Sales_Log.ldf',
SIZE
= 1MB,
MAXSIZE
= 100MB,
FILEGROWTH
= 10%
)
GO
USE
sales
GO
CREATE
PARTITION
FUNCTION
pf_OrderDate
(DATETIME)
AS
RANGE
RIGHT
FOR
VALUES ('2003/01/01', '2004/01/01')
GO
CREATE
PARTITION
SCHEME
ps_OrderDate
AS
PARTITION
pf_OrderDate
TO(FG1,FG2,FG3)
GO
CREATE
TABLE
Orders
(
OrderID
INT
IDENTITY(10000, 1)
,
OrderDate
DATETIME
NOT
NULL
,
CustomerID
INT
NOT
NULL
,
CONSTRAINT
PK_Orders
PRIMARY
KEY (
OrderID, OrderDate
)
)
ON
ps_OrderDate(OrderDate)
GO
CREATE
TABLE
OrdersHistory
(
OrderID
INT
IDENTITY(10000, 1)
,
OrderDate
DATETIME
NOT
NULL
,
CustomerID
INT
NOT
NULL
,
CONSTRAINT
PK_OrdersHistory
PRIMARY
KEY (
OrderID, OrderDate
)
)
ON
ps_OrderDate(OrderDate)
GO
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2002/6/25', 1000 )
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2002/8/13', 1000 )
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2002/8/25', 1000 )
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2002/9/23', 1000 )
GO
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2003/6/25', 1000 )
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2003/8/13', 1000 )
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2003/8/25', 1000 )
INSERT
INTO
dbo.Orders
(
OrderDate, CustomerID
)
VALUES (
'2003/9/23', 1000 )
GO
SELECT
*
FROM
dbo.Orders
WHERE
$partition.pf_orderdate(orderdate)
= 1
SELECT
*
FROM
dbo.Orders
PRINT
N'数据更新后,分区变化'
UPDATE
dbo.Orders
SET
OrderDate
=
'2004-9-8'
WHERE
OrderID
= 10000
SELECT
*
FROM
dbo.Orders
WHERE
$partition.pf_orderdate(orderdate)
= 1
SELECT
*
FROM
dbo.Orders
PRINT
N'数据归档,外键阻止归档'
CREATE
TABLE
Customer
(
id INT
PRIMARY
KEY
)
INSERT
INTO
customer
VALUES ( 1000 )
ALTER
TABLE
orders
ADD
CONSTRAINT
fk_orders_customer
FOREIGN
KEY (customerid)
REFERENCES Customer
(id)
CREATE
TABLE
order_detail
(
id
INT
,
ORDERid
INT
,
order_date
DATETIME
,
CONSTRAINT
PK_Orders_detail
PRIMARY
KEY (
ORDERid, Order_Date
)
,
CONSTRAINT
fk_order
FOREIGN
KEY (
ORDERid, order_date
) REFERENCES
dbo.Orders
(
OrderID, OrderDate
)
)
INSERT
INTO
order_detail
VALUES ( 1, 10000,
'2004/9/8'
)
ALTER
TABLE
orders
SWITCH
PARTITION 2 TO
ordersHistory
PARTITION 2
GO
/*
消息4967,级别16,状态1,第1 行
ALTER TABLE SWITCH 语句失败。由于源表'Sales.dbo.orders' 包含约束'fk_order' 的主键,因此不允许使用SWITCH。
*/
SELECT
*
FROM
dbo.Orders
WHERE
$partition.pf_orderdate(orderdate)
= 1
SELECT
*
FROM
dbo.Orders
SQL Server 分区表补充说明的更多相关文章
- SQL SERVER分区表
简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...
- SQL Server ->> 分区表上创建唯一分区索引
今天在读<Oracle高级SQL编程>这本书的时候,在关于Oracle的全局索引的章节里面有一段讲到如果对一张分区表创建一条唯一索引,而索引本身也是分区的,那就必须把分区列也加入到索引列表 ...
- SQL Server分区表,能否按照多个列作为分区函数的分区依据(转载)
问: Hi, I have a table workcachedetail with 40 million rows which has 8 columns.We decided to partiti ...
- SQL Server 分区表
分区表可以提高查询效率 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理.这样文件的大小随 ...
- SQL Server 分区表的创建方法与管理
背景知识: 分区表.可以把表中的数据按范围保存到不同的文件组中. 举个例子吧: 2014年以前的数据保存到文件组A 2014~2015的数据保存到文件组B 2015年以后的数据保存到文件组C 好处: ...
- SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤
在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...
- Sql Server系列:分区表操作
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...
- 玩转SQL Server复制回路の变更数据类型、未分区表转为分区表
玩转SQL Server复制回路の变更数据类型.未分区表转为分区表 复制的应用: 初级应用:读写分离.数据库备份 高级应用:搬迁大型数据库(跨机房).变更数据类型.未分区表转为分区表 京东的复制专家 ...
- sql server 小记——分区表(上)
我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...
随机推荐
- Auto Mapper02《demo》
学习这些基本上网上都有一些教程或者别人做的demo,我是按照这个方式去学习的.先做个demo,学会如何去使用它,接着去慢慢的了解它是如何的运行的,理解里面的一些基本的基础知识.我们不可以再像 ...
- HTML标签理解
基础回顾 1:<!DOCTYPE HTML> 这个我们都不陌生,它是文档说明,在html页面的第一行就写的是这个.在 html5中只有一个,大小写不敏感.是便于浏览器识别文档类型. 2:& ...
- DirectX.Capture Namespace
DirectX.Capture Class Library DirectX.Capture Namespace The DirectX.Capture namespace contains cla ...
- MS SQL Server带有时间的记录怎样查询
比如某一张表[A]有一个保存日期包含时间字段[B],如果以这个段[B]作查询条件对数据记录进行查询.也我们得花些心思才能查询到我们想得到的记录. 现在我们需要查询这天2014-06-21的所有记录: ...
- 基于<MediaElement>的WPF视频播放器(带部分特效)【2】
一.前言 上回说到需要做放视频的使用向导,这两天公司里的老司机一直帮我答疑解惑,让这个任务变得挺顺的,真心感谢他们! 这次与[1]中的不同之处在于: (1)播放和暂停按钮集成在<Me ...
- asp.net session
简介编辑 session对象用于存储特定的用户会话所需的信息 . Session对象的引入是为了弥补HTTP协议的不足,HTTP协议是一种无状态的协议. Session中文是"会话" ...
- Linux下的C编程实战
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...
- 【C#】VS2015开发环境的安装和配置(一)2016-08-03更新
分类:C#.VS2015.WPF.ASP.NET MVC.Android.iOS.Unity3D: 更新日期:2016-08-03 一.简介 为了避免网上乱七八糟的过时介绍,避免误导初学者,这次把至2 ...
- 非常不错的Navigation Bar效果
非常不错的Navigation Bar效果,该源码转载于源码天堂的,大家可以了解一下吧,多视图应用程序中,我们常常使用到自定义UINavigationBar来完成导航条的设置. 源码我就不上传了,大家 ...
- 程序员下一门要学的编程语言Swift
基于PHP是世界上最好的编程语言这个真理,我一直认为Hack才是程序员要学的下一门编程语言. 但今天看到InfoQ放出的新闻:"Google或许会将Swift编程语言纳入Android平台并 ...