分区教程参阅:http://database.9sssd.com/mssql/art/951

切换分区(归档):http://technet.microsoft.com/zh-cn/library/ms191160(v=sql.105).aspx

 

补充:

  1. 数据更新时,会根据分区依据,数据在文件组间移动
  2. 归档时,外键约束将阻止归档(同文件组的不同表间归档)

 

理想方案:正常分区,定期结转

 

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 分区表补充说明的更多相关文章

  1. SQL SERVER分区表

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  2. SQL Server ->> 分区表上创建唯一分区索引

    今天在读<Oracle高级SQL编程>这本书的时候,在关于Oracle的全局索引的章节里面有一段讲到如果对一张分区表创建一条唯一索引,而索引本身也是分区的,那就必须把分区列也加入到索引列表 ...

  3. SQL Server分区表,能否按照多个列作为分区函数的分区依据(转载)

    问: Hi, I have a table workcachedetail with 40 million rows which has 8 columns.We decided to partiti ...

  4. SQL Server 分区表

    分区表可以提高查询效率 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理.这样文件的大小随 ...

  5. SQL Server 分区表的创建方法与管理

    背景知识: 分区表.可以把表中的数据按范围保存到不同的文件组中. 举个例子吧: 2014年以前的数据保存到文件组A 2014~2015的数据保存到文件组B 2015年以后的数据保存到文件组C 好处: ...

  6. SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤

    在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...

  7. Sql Server系列:分区表操作

    1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...

  8. 玩转SQL Server复制回路の变更数据类型、未分区表转为分区表

    玩转SQL Server复制回路の变更数据类型.未分区表转为分区表 复制的应用: 初级应用:读写分离.数据库备份 高级应用:搬迁大型数据库(跨机房).变更数据类型.未分区表转为分区表 京东的复制专家 ...

  9. sql server 小记——分区表(上)

    我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...

随机推荐

  1. Dapper学习 - Dapper.Rainbow(一) - Create

    Dapper这个ORM有许多扩展, 我自己用过两种, 也算是比较主流的两种, Rainbow和Extension, 这里就先介绍下Rainbow吧, 毕竟这个先用, 当然, 由于我使用的是mysql数 ...

  2. c#中如何执行存储过程

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. C# 在异步中使用HttpWebRequest出现的“正在终止线程”错误的解决方案

    最近做接口对接,因需求变化需要用到异步推送信息,就利用委托做了异步. 程序运行过程中时不时出现“正在终止线程”的错误信息,导致两边订单信息不一致,代码如下: byte[] byteData = Enc ...

  4. C#编程总结(二)多线程基础

    C#编程总结(二)多线程基础 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作.要使应用程序能够快速响应 ...

  5. 电脑Windows使用中遇到的那些问题

    Win64位注册表导入方法 64位Windows操作系统注册表不同于32位Windows操作系统,Win64 位版本分为 32 位注册表项和 64 位注册表项.默认 64 位版本注册表编辑器 (Reg ...

  6. iOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)

    iOS学习(OC语言)知识点整理 一.OC中的字典 1)字典:是一个容器对象,元素是以键-值对(key-value)形式存放的,key和value是任意类型的对象,key是唯一的,value可以重复 ...

  7. Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. The ...

  8. Android使用SAX解析XML(5)

    parse_handler.java文件: package com.hzhi.my_sax; import org.xml.sax.Attributes; import org.xml.sax.SAX ...

  9. 基于TCP和多线程实现无线鼠标键盘-Socket(2)

    在(1)中,实现了Windows服务端与Android客户端的连接,本节将实现在Windows服务端与Android客户端之间传递数据. Android客户端的发送线程SendThread.java代 ...

  10. MUI(1)

    今天小编用HBuilder+MUI开发移动APP,不用Android原生也不用IOS原生,仅仅用HTML5+MUI.小编也是初学者所以如有不准确的地方望大家指出帮助小编改正,同时也可以促进大家的深入学 ...