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 ...
随机推荐
- webkit技术内幕读书笔记 (四)
资源缓存 资源缓存的目的是为了提高资源使用的效率,其基本思想是建立一个资源的缓存池,当需要请求资源的时候先去资源池查找是否有相应的资源,如果没有则向服务器发送请求,webkit收到资源后将其设置到该资 ...
- j2ee高级开发技术课程第五周
pplet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序. 如下所示是独立的 J ...
- es-07-head插件-ik分词器插件
5.x以后, es对head插件的支持并不是特别好 而且kibana的功能越来越强大, 建议使用kibana 1, head插件安装 在一台机器上安装head插件就可以了 1), 更新,安装依赖 su ...
- php的 $_REQUEST取值为空
默认的 $_REQUEST 会获取 $_POST, $_GET, $_COOKIE的数据,这些可以通过查看 php.ini来确认: 由上图可以看出,获取的内容是通过 variables_order 和 ...
- [Python学习笔记-005] 理解yield
网络上介绍yield的文章很多,但大多讲得过于复杂或者追求全面以至于反而不好理解.本文用一个极简的例子给出参考资料[1]中的讲解,因为个人觉得其讲解最为通俗易懂,读者只需要对Python的列表有所了解 ...
- win10 磁盘占用高--- 禁用用户改善反馈 CompatTelRunner.exe
1. 2.右键点开[这台电脑],点[管理],点[服务和应用程序]点[服务],在右边框里把[superfetch] [windows search][HomeGroupListener] [HomeGr ...
- 自己实现一个一致性 Hash 算法
前言 在前文分布式理论(八)-- Consistent Hash(一致性哈希算法)中,我们讨论了一致性 hash 算法的原理,并说了,我们会自己写一个简单的算法.今天就来写一个. 普通 hash 的结 ...
- webpack4使用mode优化开发环境配置
@subject: webpack mode @author: leinov @date: 2018-11-29 mode webpack的 mode 配置用于提供模式配置选项告诉webpack相应地 ...
- maven国内aliyun镜像
打开maven安装目录下conf文件夹的settings.xml文件 配置本地仓库 <localRepository>D:/maven/repository</localReposi ...
- Log4J & elk 事故总结
周六的早晨8点,应用出现了大面积的登录超时问题. 作为一款日活15W.用户量700W+的应用,这是致命的问题. 唯一的安慰是——好在今天是周末,加班的公司才会使用.虽然如此,客服.产品的电话也被打爆了 ...