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 ...
随机推荐
- chrome版本与对应的chromedriver驱动【转载】
chrome版本与对应的谷歌驱动(chromedriver) 1.下载chromedriver:http://chromedriver.storage.googleapis.com/index.htm ...
- Python学习--11 面向对象高级编程
多重继承 Python里允许多重继承,即一个类可以同时继承多个类: class Mammal(Animal): pass class Runnable(object): def run(self): ...
- hibernate对连接池的支持和HQL查询
hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...
- RSA实现前端数据加密
一.前言 一般在登录注册的时候,不能以明文的方式传递数据到后台,如果是http下,很容易被劫持.所以对数据进行加密是常规做法. 二.RSA算法 ”RSA加密算法是一种非对称加密算法.对极大整数做因数分 ...
- Vue怎么使用Echarts创建图表
摘要:在后台管理系统中,我们经常会遇到图表,比如说:柱形图,饼状图,折线图,雷达图等等,而用来写图表插件有很多,我这里主要介绍Echarts在项目里怎么使用,官网地址如下:https://echart ...
- CTSC 2018 游记
day0 李总提前一天放假,回家颓整理行李... 然而我... 早上:睡觉... 中午:睡觉... 晚上:睡觉去火车站... 吃了几把鸡,本来想带李总入坑,但他挥手拒绝然后被李总带进了炸金花的坑... ...
- Docker基础-搭建本地私有仓库
1.使用registry镜像创建私有仓库 安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境: docker run -d -p 5000:5000 regist ...
- 在VS2010中使用Git管理源代码
前文我们讲了使用TortoiseGit管理源代码,但是对于使用VS2010的朋友来说,源代码管理起来还是不怎么方便.要是直接在VS2010中能使用Git就好了,下面我们就来看看怎么在VS2010中使用 ...
- JS DOM操作(三) Window.docunment对象——操作属性
属性:是对象的性质与对象之间关系的统称.HTML中标签可以拥有属性,属性为 HTML 元素提供附加信. 属性总是以名称/值对的形式出现,比如:name="value". 属性值始终 ...
- Java JDBC的基础知识(三)
在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...