sqlserver 分区

数据库单表数据量太大可能会导致数据库的查询速度大大下降(感觉都是千万级以上的数据表了),可以采取分区分表将大表分为小表解决(当然这只是其中一种方法),比如数据按月、按年分表,最后可以使用视图将小表重新并为总的虚拟表,其实并不影响上层程序的使用(程序也许都不知道分表了)。

主要步骤:

1、新建文件组,将数据表文件保存路径指向相应文件组(应将文件组和文件放入不同的磁盘中,甚至不同服务器形成分布式数据库,因为数据的读取瓶颈很大程度在于磁盘的的读写速度,多个磁盘存放一个表可以负载均衡)

2、设置分区函数(声明分区的标准)

3、设置分区方案(即哪些区域使用哪个分区函数,形成完整的分区方案)

4、给新表或现有表设置分区方案

5、建立视图

详细步骤(看需求可选):

一、数据库状态备份和恢复

USE master
-- 备份
BACKUP DATABASE AdventureWorksTO DISK = 'AdventureWorks.bak'WITH FORMAT---- 恢复
RESTORE DATABASE AdventureWorksFROM DISK = 'AdventureWorks.bak'WITH REPLACE
GO

二、文件组和文件操作

添加文件组

USE [master]
GO
ALTER DATABASE ZHH ADD FILEGROUP [文件组名称]
Go

添加文件并把其指向指定文件组

USE master;
GO
ALTER DATABASE 数据库名
ADD FILE(
NAME=N'文件名',
FILENAME='存放路径', //如:E:\201109.NDF(精确到文件名)文件组存放与不同磁盘可以提高IO读写效率(多个磁头并发)
SIZE=3MB,
MAXSIZE=100MB,
FILEGROWTH=5MB
)TO FILEGROUP [文件组名]
Go

修改文件(可选)

USE master;
GO
ALTER DATABASE 数据库名
MODIFY FILE
(NAME = 文件名,
SIZE = 20MB);   //可以修改所有属性,列举即可
GO

删除文件(可选)

ALTER DATABASE 数据库名 REMOVE FILE [文件组名] 

三、分区函数和分区方案

分区函数

用于规范如何分区的标准,如已哪列进行为标准分区、分区的方式(按时间、ID等)、分区的具体界限(一般来说,界限指标数要比分区数少1,一刀则有两段)

USE 数据库名   
GO
CREATE PARTITION FUNCTION 分区函数名 (指标列的数据类型)   //如:datetime、int
AS RANGE RIGHT   //右边界切分,默认为LEFT
FOR VALUES (划分界限)  //如时间划分('2003/01/01', '2004/01/01'),两个时间界限可划分出三个分区
GO

分区方案

用于将已经建立好的分区函数组织成完整的方案,为每个分区分配存储位置

Use 数据库名
go
create  partition  scheme 分区方案名
as partition  分区函数
to(文件组1,文件组2,文件组3,...) //注意分区数要与实际分区一致
go

在原有的基础上添加分区(可选)

use 数据库名
go
alter partition scheme ps_OrderDate  next used [FG4]    //修改分区方案ps_OrderDate,定义新新分区使用FG4文件组
alter partition function pf_OrderDate() split range('2005/01/01')  //修改分区函数pf_OrderDate,在末尾添加界限'2005/01/01'
go

为现有表设置分区方案(可选)

//为AutoBench表的InsertTime列创建新聚集索引,并绑定Scheme_DateTime分区方案
CREATE CLUSTERED INDEX IX_CreateDate ON AutoBench (InsertTime)
ON Scheme_DateTime (InsertTime)

注:如原来主键有聚众索引要将其改为非聚集索引,才可添加新聚众索引

//删除原主键上的聚集索引PK_Product
ALTER TABLE Product DROP CONSTRAINT PK_Product//重新创建主键非聚集索引PK_Product
ALTER TABLE Product ADD CONSTRAINT PK_Product PRIMARY KEY NONCLUSTERED (ProductID ASC)

上面语句也可直接在索引属性中将聚集改为非聚集

为新建表设置分区方案(可选)

//创建表格Order,并设置Scheme_DateTime分区方案,指标列为OrderDate
CREATE TABLE [Order]
(OrderID INT IDENTITY(1,1) NOT NULL,UserID INT NOT NULL,TotalAmount DECIMAL(18,2) NULL,OrderDate DATETIME NOT NULL
) ON Scheme_DateTime (OrderDate)
查询分区数据

四、其他操作

查询分区数据

$partition函数--为任何指定的分区函数返回分区号,一组分区列值将映射到该分区号中

语法: [ database_name. ] $PARTITION.partition_function_name(expression)

参数: database_name 包含分区函数的数据库的名称。

partition_function_name 对其应用一组分区列值的任何现有分区函数的名称。

expression 其数据类型必须匹配或可隐式转换为其对应分区列数据类型的表达式。 expression 也可以是当前参与partition_function_name 的分区列的名称。

返回类型: int (分区号)

//筛选使用Function_DateTime作为分区函数的AutoBench表,以InsertTime作为指标列的第二个分区的所有数据
select * from AutoBench WHERE $PARTITION.Function_DateTime(InsertTime) = 2

合并分区

//删除Sales数据库下的分区函数pf_OrderDate中的'2003/01/01'界限,以次界限划分的两个分区合并,分区号一次减1
use Sales
go
alter partition function pf_OrderDate() merge range('2003/01/01')
go

查看系统视图

select * from sys.partition_functions   //分区函数
select * from sys.partition_range_values    //分区方案
select * from sys.partition_schemes     //边界值点

五、自动分区

可以采用SQL Server代理中的作业定期自动执行分区脚本,实现自动分区(如每月结束自动执行按月分区的操作)

自动分区测试脚本

DECLARE @fileGroupName VARCHAR(20),    --文件组名(格式为:FG+@Month)@fileName VARCHAR(20),    --文件名(格式为:F+@Month)@filePath VARCHAR(100),        --文件存放路径(格式为:存放目录路径+@fileName.ndf)@dataBaseName VARCHAR(20),    --数据库名@Month VARCHAR(10),        --当前时间年月(格式为:yyyymm)@schemeName VARCHAR(20),    --分区方案名@partFunctionName VARCHAR(20),    --分区函数名@limit VARCHAR(10)    --分区界限(以时间分区则为时间字符串,格式为:mm/dd/yyyy)SET @fileGroupName='FG201805'
SET @Month=CONVERT(varchar(10),GETDATE(),112)
SET @fileName=N'F201805'
SET @filePath='C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\F201805.ndf'
SET @dataBaseName='Chassis'
SET @schemeName='Scheme_DateTime'
SET @partFunctionName='Function_DateTime'
SET @limit=CONVERT(varchar(10),GETDATE(),101) --语句要指明需要操作的数据库
if exists(select * from Chassis.sys.filegroups where name=@fileGroupName)beginprint '文件组存在,不需添加'end
elsebeginexec('ALTER DATABASE '+@dataBaseName+' ADD FILEGROUP ['+@fileGroupName+']')print '新增文件组'+@fileGroupNameendif exists(select * from Chassis.sys.database_files where [state]=0 and (name=@fileName or physical_name=@filePath))beginprint 'ndf文件存在,不需添加'end
elsebeginexec('ALTER DATABASE '+@dataBaseName+' ADD FILE(NAME ='''+@fileName+''',FILENAME = '''+@filePath+''')TO FILEGROUP ['+@fileGroupName+']')print '添加文件'+@fileName+'至文件组'+@fileGroupNameendif exists(select * from sys.partition_schemes where name=@schemeName)beginexec('alter partition scheme '+@schemeName+' next used ['+@fileGroupName+']')print '修改分区方案,指定下一分区的文件组'end
elsebeginprint '分区方案不存在'endif exists(select * from sys.partition_range_values where function_id=(select function_id from sys.partition_functions where name=@partFunctionName))beginif exists(select * from sys.partition_range_values where function_id=(select function_id from sys.partition_schemes where name='Scheme_DateTime') and value=CONVERT(datetime,''+@limit+'',101))beginprint '界限已存在'endelsebeginexec('alter partition function '+@partFunctionName+'() split range('''+@limit+''')')print '修改分区函数,添加划分界限为:'+@limitendend
elsebeginprint '分区函数不存在'end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381570.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

本地生成 bd-ticket-guard-client-cert,bd-ticket-guard-client-data

#我们目前可以发现很多协议已经加入了 bd-ticket-guard-client-cert, bd-ticket-guard-client-data 暂时先挂一下~

BD云20MB/s不限速,随时下架!

文章来源:不正经程序员 作者:哈哈浩 细心的小伙伴,也许发现了。 哈哥之前多次推荐的 PDown 不好使了。 尝试解析分享链接时,直接 error! 其实 Github 上作者早已透露无力维护 作者的意思是收到了百度方面的警告&#x…

别说手机充电没讲究!其实这4种方法,才是手机正确的充电方式

智能手机现在已经是人手一部了,手机在使用的时候会引发很多争议,比如怎么给手机充电才好?手机续航为什么大不如前了呢? 其实很大一部分原因是因为错误的充电方式,今天笔者就教大家如何正确的给手机充电。 充电方式 相…

手机充电你充对了吗?这四种情况下不建议给手机充电,原因很简单

互联网时代下的我们,吃穿住行都离不开手机,于是给手机充电就成了每天都要去做的事,那么,如果你在给手机充电时,遇到以下情况,手机维修工程师建议暂停充电: 1.手机严重发烫 手机在充电的过程中本…

手机如何实现边有线上网边充电?

随着Type-C接口的普及,生活上使用的设备产品越来越多开始采用Type-C接口,接口的统一不仅给我们带来了一线通的方便,而且节省了资源,有益于环保。 下面我们进入正题,读者一看到手机边上网边充电可能有点诧异&#xff0…

手机内部充电电流控制原理图(如果手机支持快充,比如支持9V快充,则通过充电接口的D+、D-二根线,输出对应的高低电平组合,FP6601就会控制它的3脚接地,4脚悬空,此时R3与R2并联,改变反馈下拉)

手机内部充电电流控制原理图 来源:电工之家•作者:电工之家• 2019-12-08 10:48 • 7365次阅读 0 手机充电器电流控制方面: 现在的手机充电器,无一例外,都使用了隔离式开关电源电路,充电器的体积&#x…

手机如何实现边充电边传输数据?

日常我们在手机连接电脑或者U盘传输数据的时候,虽然都是传输数据,但是主从关系是不同的,在手机连接电脑的时候可以同时给手机充电,而连接U盘的时候是手机提供电力给U盘,造成这种区别到底是由什么控制呢? 首…

Android手机一直连接USB进行自动化,一直充电,可能导致电池鼓包,如何定时禁止充电和开启充电?

为了避免 Android 手机在连接 USB 进行自动化测试时充电过度导致电池鼓包的问题,可以通过以下步骤实现禁止充电若干小时后自动充电的功能。 步骤: 连接 Android 手机到电脑的 USB 端口。 在计算机管理窗口的左侧窗格中选择设备管理器[3]。 找到并展开…

通过SPSS使用命令语法实现快速删除变量的步骤

当我们面对一个庞大的数据集的时候,我们想要对该数据集进行一些操作,可能会觉得比较繁琐。为了快速精准的实现数据过滤操作, SPSS是自带了语法功能,通过语法即可快速实现复杂操作。今天小编将通过快速删除变量的操作,让…

如何使用SPSS进行判别分析

今天将为大家讲解使用spss进行判别分析的相关步骤。 1.Discriminant Analysis判别分析主对话框 如图 1-1 所示 图 1-1 Discriminant Analysis 主对话框 (1)选择分类变量及其范围 在主对话框中左面的矩形框中选择表明已知的观测量所属类…

spss使用教程

描述性统计结果 步骤从上到下 分析描述统计描述 制作矩阵散点图 4. 图形 5. 旧对话框 6. 散点图/点图 7. 矩阵散点图 求相关系数和p值

SPSS教程及常用操作参考表 —— 一篇文章解决对SPSS的所有疑问

SPSS教程 文章目录 SPSS教程* 怎样学习SPSS1. 操作界面(1) 数据窗口(2) 输出窗口 2. 如何导入数据3. 一般的数据处理流程4. SPSS数据分析基本框架5. 针对不同的使用场景与需求, 应该使用哪些SPSS内置的分析方法前置知识(1) SPSS中有四种不同种类的变量(2) 四种类型的变量介绍 分…

oppo reno 10倍变焦版

oppo reno 10倍变焦版 我觉得最好看

变焦与对焦(转自csdn)

转自:http://blog.csdn.net/lizhiguo0532/article/details/6918849#comments 声明:此原创非彼原创,资料来源于网络,只是经过加工整理罢了。如果引用了你的资料并没有说明出处,敬请原谅!仅供学习参考。 一、…

鸿蒙手机摄影,华为P50亮利剑,麒麟9000+鸿蒙OS+200倍变焦,这才是华为的实力

华为今年推出了全新的华为P40系列,一时间在市场上获得广泛的欢迎,甚至华为P40pro成为了手机行业中最受青睐的一款国产手机。不过最近网上却曝光了了一款全新的华为5G旗舰手机,不过这款5G旗舰手机曝光的参数比较全面,所以根据参数判…

曲线救国?5G手机救不了智能手机市场

文|陈选滨 来源|智能相对论(aixdlun) 全球知名的IT研究与顾问咨询公司Gartner每年会通过分析来预测当前新兴科技产业的发展阶段及达到成熟期所需要的时间,并绘制在一条曲线上,名为技术成熟度曲线。 2018年8月,在Gar…

数字变焦_如何参加变焦会议

数字变焦 Zoom doesn’t hold back when it comes to allowing users to join a meeting. The company provides several ways to join—even if you haven’t downloaded Zoom’s software. Here’s every way a user can enter a Zoom meeting. 在允许用户加入会议方面&#…

手机camera新篇章

什么是CCM? 1、紧凑摄像模组(Campact Camera Module) 2、CMOS摄像模组(CMOS Camera Module) 3、手机摄像模组(Cellphone Camera Module) 手机摄像头模组由镜头、传感器、电容、FPC板、镜座、…

手机h5像素_拍照超逆天!华为P30大奖来袭 | 4000万像素+50倍变焦,漳州手机摄影界真要沸腾了......

「九龙财富杯」漳州市区城市夜景大赛 随手拍开赛以来,不少小伙伴前来 咨询大奖【华为P30】 这款新机有多牛,搞到一台有多拉风?! 就让小编带你一起回顾一下26日的发布会! 因为正如华为所说 P30 要改写手机拍照的规则&am…

家电维修小程序开发指南:从零搭建到上线

随着科技的发展和人们生活水平的提高,家电已经成为人们生活中不可或缺的一部分。然而,随之而来的是家电维修门店业务的繁忙和效率的考验。为了提高家电维修门店的效率和服务质量,建立一个便捷高效的小程序已成为必要的选择。 本文将介绍一个简…