热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MSSQLSERVER分区创建分区合并删除分区

1.当业务生产数据量大的时候,我们需要将一个大表拆分为多个较小的表,我们要的查询更快,基本原理就是,因为要扫描的数据变的更小。维护任务重新生成索引或备份表更快的运行。2.我们可以再

1.当业务生产数据量大的时候,我们需要将一个大表拆分为多个较小的表,我们要的查询更快,基本原理就是,因为要扫描的数据变的更小。维护任务重新生成索引或备份表更快的运行。

2.我们可以再不通过将表物理放置在多个磁盘驱动器上来拆分表的情况下获取分区。如果将某个表放置在一个物理驱动器上,将相关表放置在另一个驱动器上,则可以提高查询性能,因为当运行涉及表间连接的查询时,多个磁盘头同时读取数据。可以使用SQL Server文件组来指定放置表的磁盘在多cpu及多硬盘的服务器上,有效的利用了i/o并行处理,使得不至于存取数据时卡死在某一个物理硬盘上

3.分区的方式,基本就三种方式:硬件分区、水平分区、垂直分区;

缺点:

  一般来说分区表是用的不同的文件组 从外面往不同的文件组插入数据是有可能比普通表慢得

不说了下面基于原始表创建的分区 

1.分区步骤

   a.创建分区函数

   b.创建分区架构

   c.对表进行分区表

基于缓存更新机制,我使用时间来进行分区,这里大家根据业务的要求使用合适的字段来作为分区:

我这里用200万这个表[bpmExtend]来操作下,

首先添加文件组:

ALTER DATABASE [bpmExtend] ADD FILEGROUP OA2013

GO
ALTER DATABASE [bpmExtend] ADD FILEGROUP OA2014 GO ALTER DATABASE [bpmExtend] ADD FILEGROUP OA2015 GO ALTER DATABASE [bpmExtend] ADD FILEGROUP OA2016 GO
添加文件并把其指向指定文件组


ALTER DATABASE [bpmExtend] 
ADD FILE
(
NAME=’OA2013_T’,
FILENAME =’D:\sqldata\OA2013_T.NDF’
)
TO FILEGROUP OA2013
GO
————————————————————————
ALTER DATABASE [bpmExtend] 
ADD FILE
(
NAME=’OA2014_T’,
FILENAME =’D:\sqldata\OA2014_T.NDF’
)
TO FILEGROUP OA2014
GO
———————————————————————–
ALTER DATABASE [bpmExtend] 
ADD FILE
(
NAME=’OA2015_T’,
FILENAME =’D:\sqldata\OA2015_T.NDF’
)
TO FILEGROUP OA2015
GO
—————————————————————————–
ALTER DATABASE [bpmExtend] 
ADD FILE
(
NAME=’OA2016_T’,
FILENAME =’D:\sqldata\OA2016_T.NDF’
)
TO FILEGROUP OA2016
GO

以后删除分区,会报不为空无法删除的error

下面为解决error的脚本

———–删除不为空的的文件–
ALTER DATABASE [bpmExtend] 
MODIFY FILE
(
NAME = OA2014,
SIZE = 2MB
);

ALTER  DATABASE [bpmExtend] REMOVE FILE OA2014

创建分区函数,下面一系列都是根据分区函数来的

CREATE PARTITION FUNCTION FUN_OA (DATETIME) AS RANGE RIGHT FOR VALUES 
(
‘20140101 23:59:59.997’,
‘20150101 23:59:59.997’,
‘20160101 23:59:59.997’
)
–删除分区函数
–DROP  PARTITION FUNCTION FUN_OA

这里用的right函数,意思是’20140101 23:59:59.997’之前的数据归于第一分区,也可以这样理解把’20140101 23:59:59.997 定义为第一分区;

下面就创建分区方案

CREATE PARTITION SCHEME SCH_OA
AS PARTITION FUN_OA TO
(
OA2013,
OA2014,
OA2015,
OA2016
)

—如何将一个普通表转换成一个分区表?说到底,只要将该表创建一个聚集索引,并在聚集索引上使用分区方案

删除原表的聚集索引

ALTER TABLE [dbo].[Opinion_t] DROP CONSTRAINT PK_CALL;

————————————————————-

ALTER TABLE [dbo].[Opinion_t]  ADD CONSTRAINT PK_CALLS PRIMARY KEY NONCLUSTERED (ID ASC )

——————————————————————————-

创建分区字段的聚集索引
CREATE CLUSTERED INDEX IX_POSTTIME ON [dbo].[Opinion_t] ([PostTime]) ON SCH_OA ([PostTime])

——–查看第几个分区————————-

SELECT $PARTITION.FUN_OA (‘20140101 ‘) 当时定义的第一个分区,执行如下图:

《MSSQLSERVER 分区创建 分区合并删除 分区》

下面统计分区表的行数:

SELECT $PARTITION.FUN_OA(POSTTIME),COUNT(ID) FROM [dbo].[Opinion_t]
GROUP BY $PARTITION.FUN_OA(POSTTIME)

《MSSQLSERVER 分区创建 分区合并删除 分区》

为了公平起见也在原始表上创建一个非聚集索引来和分区表做下性能对比,

CREATE INDEX IX_POSTTIME ON [dbo].[Opinion] ([PostTime])

接下来执行一个简单的查询:

DBCC DROPCLEANBUFFERS–清下缓存–生产库不要随意清
SET STATISTICS IO ON 
SET STATISTICS TIME ON 

SELECT *
FROM [dbo].[Opinion]  WHERE [PostTime]>’2015-12-25 16:03:54.000′

SELECT*
 FROM [dbo].[Opinion_t] WHERE [PostTime]>’2015-12-25 16:03:54.000′

下面是执行计划(预读是因清了缓存):

原始表 ‘Opinion’。扫描计数 1,逻辑读取 48089 次,物理读取 3 次,预读 48092 次,lob 逻辑读取 979319 次,lob 物理读取 1060 次,lob 预读 0 次。

 CPU 时间 = 1108 毫秒,占用时间 = 20178 毫秒。

分区表:

表 ‘Opinion_t’。扫描计数 2,逻辑读取 15508 次,物理读取 5 次,预读 15497 次,lob 逻辑读取 979346 次,lob 物理读取 689 次,lob 预读 0 次。

  CPU 时间 = 1201 毫秒,占用时间 = 9507 毫秒。

《MSSQLSERVER 分区创建 分区合并删除 分区》


查看分区所有信息

select * from sys.partition_functions    select * from sys.partition_range_values

select * from sys.partition_schemes





推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
好孩子_瑾马甲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有