分区表

 

 

测试版本:   

    Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
    Feb 20 2014 20:04:26
    Copyright (c) Microsoft Corporation
    Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

------新加文件组------

ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG1
GO
ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG2
GO
ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG3
GO
ALTER DATABASE [PARTITION] ADD FILEGROUP  LogFG4
GO

---添加文件组文件-------

---初始大小和增长速度和PRIMARY文件组保持一致------------

ALTER DATABASE  [PARTITION] ADD FILE
(
NAME=N'LogFile1',
FILENAME=N'F:\Partition\LogData1.ndf',
SIZE = 5120KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10240KB
)TO FILEGROUP LogFG1
GO

ALTER DATABASE  [PARTITION] ADD FILE
(
NAME=N'LogFile2',
FILENAME=N'F:\Partition\LogData2.ndf',
SIZE = 5120KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10240KB
)TO FILEGROUP LogFG2
GO

ALTER DATABASE  [PARTITION] ADD FILE
(
NAME=N'LogFile3',
FILENAME=N'F:\Partition\LogData3.ndf',
SIZE = 5120KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10240KB
)TO FILEGROUP LogFG3
GO

ALTER DATABASE  [PARTITION] ADD FILE
(
NAME=N'LogFile4',
FILENAME=N'F:\Partition\LogData4.ndf',
SIZE = 5120KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10240KB
)TO FILEGROUP LogFG4
GO

SELECT * FROM SYS.FILEGROUPS---文件组

----创建分区函数------

CREATE PARTITION  FUNCTION PF_LOG (DATETIME)
AS   RANGE LEFT FOR VALUES
(
'2016-01-31 23:59:59.997',
'2016-02-29 23:59:59.997',
'2016-03-31 23:59:59.997'
)
GO

当月的最大时间和最小时间

---最小时间--

SELECT CONVERT(datetime,CONVERT(char(8),getdate(),120)+'1')

------当月最大时间------------------
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,getdate()),120)+'1')+' 23:59:59.998'

------创建分区方案----

CREATE PARTITION SCHEME PS_LOG AS PARTITION PF_LOG
TO
(
LogFG1,
LogFG2,
LogFG3,
LogFG4
)
GO

----创建分区表-----

CREATE TABLE Switch_Log
(
ID INT IDENTITY(1,1),
NAME1 CHAR(5),
NAME2 CHAR(5),
DATE1 DATETIME NOT NULL,
)
ON PS_LOG(DATE1)
GO

-------创建分区索引以及主键-----------

(创建唯一性索引,索引要包含分区列)
CREATE CLUSTERED INDEX IX_DATE1 ON Switch_Log(DATE1)
ALTER TABLE Switch_Log ADD  CONSTRAINT PK_Log PRIMARY KEY NONCLUSTERED (ID,DATE1)
CREATE INDEX IX_NAME1 ON Switch_Log(NAME1)

------插入测试数据-----

INSERT INTO Switch_Log (NAME1,NAME2,DATE1)
VALUES ('AAAAA','BBBBB','2016-01-01 00:00:00.000')
GO 100000

INSERT INTO Switch_Log (NAME1,NAME2,DATE1)
VALUES ('CCCCC','DDDDD','2016-02-01 00:00:00.000')
GO 100000

INSERT INTO Switch_Log (NAME1,NAME2,DATE1)
VALUES ('EEEEE','FFFFF','2016-03-01 00:00:00.000')
GO 100000

-------------测试1-----------------

SELECT $PARTITION.PF_LOG('2016-01-02 00:00:00.000')

查找某个日期所在的分区

-------测试SWITCH-------------------

CREATE TABLE Switch_Log1
(
ID INT NOT NULL,
NAME1 CHAR(5),
NAME2 CHAR(5),
DATE1 DATETIME NOT NULL,
) ON PS_LOG(DATE1)
GO

---Switch目标表时,目标表要和分区表聚集索引要保持一致,数据是按聚集排列的,switch秒级别需要两个表聚集一致

--- 如果目标表swtich 分区表 则所有索引都要保持一致

CREATE CLUSTERED INDEX IX_DATE1 ON Switch_Log1(DATE1)

ALTER TABLE Switch_Log1 ADD  CONSTRAINT PK_Log1 PRIMARY KEY NONCLUSTERED (ID,DATE1)
CREATE INDEX IX_NAME1 ON Switch_Log1(NAME1)

----SWITCH--------------

ALTER TABLE [dbo].[Switch_Log] SWITCH PARTITION 1 TO [dbo].[Switch_Log1] PARTITION 1
ALTER TABLE [dbo].[Switch_Log1] SWITCH PARTITION 1 TO [dbo].[Switch_Log] PARTITION 1

------MERGE--------

ALTER PARTITION FUNCTION     [PF_LOG]() MERGE  RANGE ('2016-01-31 23:59:59.997')

合并分区 根据 开始分区函数定义LEFT/RIGHT 定义来 删除分区范围

比如: 测试案例,我们用了left ,则第一分区的数据会合并到第二分区;RIGHT反之亦然。

-----------------SPLIT------------------

ALTER PARTITION SCHEME     [PS_LOG] NEXT USED LogFG1
ALTER PARTITION FUNCTION     [PF_LOG]() SPLIT RANGE ('2016-01-31 23:59:59.997')

先指定分区方案,再新加分区函数范围。

新的分区建成;

 

查询所有分区,所在的区、页数、行数、分区范围;

SELECT OBJECT_NAME(INS.OBJECT_ID)as '表名',
PS.partition_number AS '分区',
FG.NAME as '文件组',
AU.TOTAL_PAGES AS '页数',
CASE boundary_value_on_right WHEN 1 THEN 'RIGHT'
ELSE 'LEFT' END as 'L/R',
VALUE AS '分区界限',
PS.ROWS AS '行数',
CASE  when ps.data_compression=0 then '未压缩'
ELSE  '压缩'
END AS '是/否压缩'
FROM SYS.PARTITIONS PS
INNER JOIN SYS.INDEXES INS
ON  PS.OBJECT_ID=INS.OBJECT_ID
AND PS.INDEX_ID=INS.INDEX_ID
JOIN  SYS.partition_schemes PSS
ON PSS.data_space_id=INS.data_space_id
JOIN SYS.partition_functions PF
ON PF.function_id=PSS.function_id
LEFT JOIN SYS.partition_range_values PRV
ON PRV.function_id=PF.function_id
AND PS.partition_number=PRV.boundary_id
JOIN SYS.destination_data_spaces DS
ON DS.partition_scheme_id=PSS.data_space_id
AND DS.destination_id=PS.partition_number
JOIN SYS.FILEGROUPS FG
ON DS.destination_id=FG.data_space_id
JOIN (SELECT CONTAINER_ID,SUM(TOTAL_PAGES)AS TOTAL_PAGES
FROM  SYS.allocation_units GROUP BY CONTAINER_ID) AS AU
ON AU.container_id=PS.partition_id
WHERE INS.INDEX_ID IN (0,1)

 

 

 

-----删除分区函数----刚好和我们创建顺序相反------

删除架构下面的表对象---架构-----函数----组文件------组---

 

ALTER DATABASE [PARTITION] REMOVE FILE LogFile1
ALTER DATABASE [PARTITION] REMOVE FILE LogFile2
ALTER DATABASE [PARTITION] REMOVE FILE LogFile3
ALTER DATABASE [PARTITION] REMOVE FILE LogFile4

ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG1
ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG2
ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG3
ALTER DATABASE [PARTITION] REMOVE FILEGROUP LogFG4

SqlServer Partition 分区表的更多相关文章

  1. 详解Oracle partition分区表

    随着表中行数的增多,管理和性能性能影响也将随之增加.备份将要花费更多时间,恢复也将 要花费更说的时间,对整个数据表的查询也将花费更多时间.通过把一个表中的行分为几个部分,可以减少大型表的管理和性能问题 ...

  2. PostgreSQL PARTITION 分区表

    PostgreSQL 分区表,操作性相当便捷. 但只能在创建时决定是否为分区表,并决定分区条件字段,普通表创建后,不能在修改为分区表. Note:通过其他方法也可转化为分区表. 和其他数据库一样,分区 ...

  3. SQLServer查看分区表详细信息

    SQL查看分区内记录个数,常规方法需要知道分区函数然后再显示,网上看到一个一句话显示的方法 ), ps.name ) as partition_scheme, p.partition_number, ...

  4. sqlserver 创建分区表

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

  5. sqlserver分区表实践:对时间分区表自动进行管理

    项目问题:有一张日志表,插入和查询为主,每天记录数据为200多万,大小为2G-4G之间.一开始开发人员使用delete语句手动删除,保留7天数据,经常造成阻塞和性能瓶颈.但是如果不删除数据随着表越来越 ...

  6. sqlserver partitition and partition table --- partition show

    I can not believe that I had done this about two years Now we know there is totally different betwee ...

  7. hive内部表、外部表、分区表、视图

    1.Table 内部表 1).与数据库中的Table在概念上是类似的 2).每一个Table在Hive中都有一个相应的目录存储数据 3).所有的Table数据(不包括 External Table) ...

  8. MSSQL sqlserver系统函数教程分享

    摘要: 下文收集了sqlserver函数教程,为每一个函数都进行了相关举例说明, 如下所示: sqlserver聚合函数教程: mssql sqlserver avg聚合函数使用简介 mssql sq ...

  9. MySQL 分区表原理及数据备份转移实战

    MySQL 分区表原理及数据备份转移实战 1.分区表含义 分区表定义指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现 ...

随机推荐

  1. svn up出现类似svn: Error converting entry in directory '.' to UTF-8问题解决

    执行svn up命令报错如下 # svn up svn: Error converting entry svn: Valid UTF- data (hex:) followed by invalid ...

  2. ZBX_NOTSUPPORTED: Item does not allow parameters.

    搞mongo监控的时候,zabbix报错:ZBX_NOTSUPPORTED: Item does not allow parameters.   想了半天,不知道原因,最后经过大神指点,原来是zabb ...

  3. 直播一:H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

  4. js 哈希路由原理实现

    在 js 中,有一种方法,可以在不刷新页面的情况下,页面的内容进行变更,ajax 是一种,这里介绍另一种,就是 哈希路由原理 先看一个简单的路由和页面内容关联的例子,要实现两个功能: 1.1. 浏览器 ...

  5. dict.get()和dict['key']的区别

    a ={'name':'xxxx'} 1.a.get('gender') :如果不存在则返回一个默认值,如果设置了则返回默认的值,没有设置就返回None 2.a['gender'] :只能获取存在的值 ...

  6. java.sql.SQLException: Can not issue data manipulation statements with executeQuery().

    1.错误描写叙述 java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). at c ...

  7. Hibernate学习笔记(五) — 多对多关系映射

    多对多关系映射 多对多建立关系相当于在第三张表中插入一行数据 多对多解除关系相当于在第三张表中删除一行数据 多对多改动关系相当于在第三张表中先删除后添加 多对多谁维护效率都一样.看需求 在实际开发过程 ...

  8. redis缓存的安装和配置

    ubantu16.04环境下安装 下载安装,依次执行命令; # 从官方网站下载安装包,注意,当前在哪个目录下执行命令,下载的包将在哪个目录下 $ wget http://download.redis. ...

  9. 数据的随机抽取 及 jQuery补充效果(菜单、移动)

    一.数据的随机抽取 都见过那种考试题从很多题中随机抽取几道的试卷吧,现在就要做这样的一个例子:从数据库中随机抽取几条数据出来显示(例如:一百中随机挑选50条) 随机挑选是要有提交数据的,所以肯定是要有 ...

  10. 初次使用Python脚本,proto协议文件转Lua代码

    使用IntelliJ IDEA编辑器编写Lua脚本的时候,安装一个插件 "EmmyLua" 可以对有代码提示功能 想把protoBuf协议文件转成Lua代码,然后给出代码提示 第一 ...