SQLSERVER 分区表实战
背景:对NEWISS数据库创建分区表T_SALES的SQL。按照日期来进行分区
步骤:
1:创建文件组
2:创建数据文件
3:创建分区函数
4:创建分区方案
5:创建表及聚集索引
6:导入测试数据(此处略),并查询数据分区情况
7:测试交换分区
8:测试合并分区
9:测试拆分分区
--创建7个文件组
ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_1] ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_2] ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_3] ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_4] ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_5] ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_6] ALTER DATABASE [NEWISS]
ADD FILEGROUP [FG_SALES_SYSDATE_7] --创建7个数据文件
ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_1',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_1.ndf',SIZE = 500MB, FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_1]; ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_2',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_2.ndf',SIZE = 500MB , FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_2]; ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_3',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_3.ndf',SIZE = 500MB , FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_3]; ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_4',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_4.ndf',SIZE = 500MB , FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_4]; ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_5',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_5.ndf',SIZE = 500MB , FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_5]; ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_6',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_6.ndf',SIZE = 500MB , FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_6]; ALTER DATABASE [NEWISS]
ADD FILE
(NAME = N'DBF_SALES_SYSDATE_7',FILENAME = N'D:\NEWISS\DBF_SALES_SYSDATE_7.ndf',SIZE = 500MB , FILEGROWTH = 10MB )
TO FILEGROUP [FG_SALES_SYSDATE_7]; --创建分区函数,边界值使用右分区
CREATE PARTITION FUNCTION
FUN_SALES_SYSDATE(DATE) AS
RANGE RIGHT
FOR VALUES('2013-02-01','2013-03-01','2013-04-01','2013-05-01','2013-06-01','2013-07-01') --创建分区方案
CREATE PARTITION SCHEME
SCH_SALES_SYSDATE AS
PARTITION FUN_SALES_SYSDATE
TO([FG_SALES_SYSDATE_1],[FG_SALES_SYSDATE_2],[FG_SALES_SYSDATE_3],[FG_SALES_SYSDATE_4],[FG_SALES_SYSDATE_5],[FG_SALES_SYSDATE_6],[FG_SALES_SYSDATE_7]) --创建T_SALES表
CREATE TABLE [dbo].[T_SALES](
[sysdate] [date] NOT NULL,
[companyco] [char](2) NOT NULL,
[stco] [char](4) NOT NULL,
[workdate] [date] NOT NULL,
[custype] [char](2) NOT NULL,
[itemco] [char](6) NOT NULL,
[eanco] [varchar](18) NOT NULL,
[divco] [char](2) NULL,
[deptco] [char](2) NULL,
[classco] [char](3) NULL,
[subclassco] [char](2) NULL,
[salesprice] [money] NULL,
[salesprice_nt] [money] NULL,
[salescost] [money] NULL,
[salescost_nt] [money] NULL,
[salescnt] [int] NULL,
[cuscnt] [int] NULL,
[cost] [money] NULL,
[downprice] [money] NULL,
[downcnt] [int] NULL,
[binkbn] [char](1) NULL,
[areaco] [varchar](2) NULL,
[insuser] [varchar](20) NULL,
[insdate] [datetime] NULL,
[upduser] [varchar](20) NULL,
[upddate] [datetime] NULL,
) ON [SCH_SALES_SYSDATE]([SYSDATE])
GO ALTER TABLE [dbo].[T_SALES] ADD CONSTRAINT [PK_SALES_SYSDATE] PRIMARY KEY CLUSTERED
(
[sysdate] ASC,
[itemco] ASC,
[stco] ASC,
[companyco] ASC,
[workdate] ASC,
[custype] ASC
) WITH( PAD_INDEX = ON, FILLFACTOR = 100, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [SCH_SALES_SYSDATE]([SYSDATE])
GO --导入测试数据(此处略) --查询数据分区情况
SELECT
$PARTITION.FUN_SALES_SYSDATE(SYSDATE)
,MIN(SYSDATE)
,MAX(SYSDATE)
,COUNT(1)
FROM T_SALES
GROUP BY
$PARTITION.FUN_SALES_SYSDATE(SYSDATE)
ORDER BY
$PARTITION.FUN_SALES_SYSDATE(SYSDATE) --测试交换分区
--先建存档表T_SALES_201301,用来保存2013年2月1日之前的数据
CREATE TABLE [dbo].[T_SALES_201301](
[sysdate] [date] NOT NULL,
[companyco] [char](2) NOT NULL,
[stco] [char](4) NOT NULL,
[workdate] [date] NOT NULL,
[custype] [char](2) NOT NULL,
[itemco] [char](6) NOT NULL,
[eanco] [varchar](18) NOT NULL,
[divco] [char](2) NULL,
[deptco] [char](2) NULL,
[classco] [char](3) NULL,
[subclassco] [char](2) NULL,
[salesprice] [money] NULL,
[salesprice_nt] [money] NULL,
[salescost] [money] NULL,
[salescost_nt] [money] NULL,
[salescnt] [int] NULL,
[cuscnt] [int] NULL,
[cost] [money] NULL,
[downprice] [money] NULL,
[downcnt] [int] NULL,
[binkbn] [char](1) NULL,
[areaco] [varchar](2) NULL,
[insuser] [varchar](20) NULL,
[insdate] [datetime] NULL,
[upduser] [varchar](20) NULL,
[upddate] [datetime] NULL,
) ON [SCH_SALES_SYSDATE]([SYSDATE])
GO ALTER TABLE [dbo].[T_SALES_201301] ADD CONSTRAINT [PK_SALES_201301_SYSDATE] PRIMARY KEY CLUSTERED
(
[sysdate] ASC,
[itemco] ASC,
[stco] ASC,
[companyco] ASC,
[workdate] ASC,
[custype] ASC
) WITH( PAD_INDEX = ON, FILLFACTOR = 100, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [SCH_SALES_SYSDATE]([SYSDATE])
GO --交换分区
ALTER TABLE [dbo].[T_SALES] SWITCH PARTITION 1 TO [dbo].[T_SALES_201301] PARTITION 1 --合并分区(将2013年2月与3月的数据合并)
ALTER PARTITION FUNCTION FUN_SALES_SYSDATE() MERGE RANGE ('2013-03-01') --拆分分区(将2013年8月1日以后的数据放到新分区)
--1:先指定分区方案下一个分区使用哪个文件组(如果需使用新文件组则需要再创建一个文件组,本例中使用刚交换出去的文件组FG_SALES_SYSDATE_1)
ALTER PARTITION SCHEME SCH_SALES_SYSDATE NEXT USED FG_SALES_SYSDATE_1
--2:拆分(指定拆分分界点2013-08-01)
ALTER PARTITION FUNCTION FUN_SALES_SYSDATE() SPLIT RANGE ('2013-08-01') --使用存储过程适当进行sql拼接进行拆分分区/交换分区存档数据的操作,建立job定期执行做到分区定期自动维护。
本文链接:http://www.cnblogs.com/ajiangg/p/3569820.html
SQLSERVER 分区表实战的更多相关文章
- sqlserver分区表实践:对时间分区表自动进行管理
项目问题:有一张日志表,插入和查询为主,每天记录数据为200多万,大小为2G-4G之间.一开始开发人员使用delete语句手动删除,保留7天数据,经常造成阻塞和性能瓶颈.但是如果不删除数据随着表越来越 ...
- SqlServer分区表概述(转载)
什么是分区表 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...
- sqlserver 分区表
我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速 ...
- (转)SQLServer分区表操作
原文地址:https://www.cnblogs.com/libingql/p/4087598.html 1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一 ...
- Sqlserver分区表
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...
- sqlserver分区表索引
对于提高查询性能非常有效,因此,一般应该考虑应该考虑为分区表建立索引,为分区表建立索引与为普通表建立索引的语法一直,但是,其行为与普通索引有所差异. 默认情况下,分区表中创建的索引使用与分区表相同分区 ...
- 使用SQL-Server分区表功能提高数据库的读写性能
首先祝大家新年快乐,身体健康,万事如意. 一般来说一个系统最先出现瓶颈的点很可能是数据库.比如我们的生产系统并发量很高在跑一段时间后,数据库中某些表的数据量会越来越大.海量的数据会严重影响数据库的读写 ...
- oracle 优化 —— 分区表
一.分区表简介 分区表类型:[范围分区].[列表分区] [hash分区] [这些分区的组合分区] 范围分区:以某一个范围进行分区.eg:时间段划分. 列表分区:以某一些几个值进行分区.eg:地区 ...
- sqlserver DBA面试题
1.sqlserver 2008 R2 on windows server 2008 R2群集中,有节点A.B,现在需要停机新添加一个节点C进来替换现有节点B,请列出必要的步骤. 2.sqlserve ...
随机推荐
- SPI(Service Provider Interface)机制
JAVA SPI 约定如下:当服务的提供者提供了服务接口的一种实现之后,在jar包的META-INF/services/ 目录中同时创建一个以服务接口命名的文件,该文件中的内容就是实现该服务接口的具体 ...
- OopMap介绍
摘自:http://blog.csdn.net/woaigaolaoshi/article/details/51439227 在HotSpot中,对象的类型信息里有记录自己的OopMap,记录了在该类 ...
- Ansible-安装-秘钥-部署-使用
本文转自:https://www.cnblogs.com/ylqh/p/5902259.html ansiblemaster:192.168.74.146 ansibleslave1 :192.168 ...
- IDA动态调试so文件出现SIGILL
用ida6.6 调试android的so文件时经常会报SIGILL的错误,意思是指令非法.而且这种错误基本都是发生在系统函数内部,像我遇到过的mmap,fopen,fgets等等.在这些函数内部如果用 ...
- redis学习(五) redis过期时间
redis过期时间 1.redis过期时间介绍 有时候我们并不希望redis的key一直存在.例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁.redis提供了一些命令,能够让我们对ke ...
- MySQL主主复制以及使用keepalived保证高可用
1:准备工作 MySQL的安装步骤在此处省略:安装完成一定要做以下准备工作,初始化MySQL,/usr/bin/mysql_secure_installation,设置root密码,删除无效账户以及t ...
- Python时间系统
Python的time和datetime模块提供了时间日期工具, python中的时间有4种表示方式: datetime obj time obj/tuple posix timestamp time ...
- 并发编程 —— Timer 源码分析
前言 在平时的开发中,肯定需要使用定时任务,而 Java 1.3 版本提供了一个 java.util.Timer 定时任务类.今天一起来看看这个类. 1.API 介绍 Timer 相关的有 3 个类: ...
- C#经典面试题100道
. .NET和C#有什么区别 答:.NET一般指 .NET FrameWork框架,它是一种平台,一种技术. C#是一种编程语言,可以基于.NET平台的应用. .一列数的规则如下: ......... ...
- Java中==规则
普通对象== 一般说来,java中的==指的是比较两个对象的内存地址是否相同.同时,在java中,一旦使用new关键字,则说明在内存中开辟了一段空间,用于存储对象. 假设我们有一个Person类,请看 ...