⑴ 数据库表分区优化
对sql Server数据表进行分区的过程分为三个步骤:
1)建立分区函数
2)建立分区方案
3)对表格进行分区
第一个步骤:建立分区函数
分区函数定义[u]how[/u],即你想要SQL Server如何对数据进行分区。这里就不以某一个表格作为例子,而是总体概括分割数据的技术。
分区是通过指定每个分区的分割界线实现的。例如,假定我们有一个Customers表格,里面包含了企业所有的客户的信息,客户信息以唯一的客户号进行辨识,客户号从1到1000000。我们可以运用以下的分区函数(这里称之为customer_Partfunc)把这个表格平均分为四个分区:
CREATE PARTITION FUNCTION customer_partfunc (int)
AS RANGE RIGHT
FOR VALUES (250000, 500000, 750000)
这些分割界线指定了四个分区。第一个分区包含所有值小于250000的记录。第二个分区包含所有值在250000和499999之间的记录。而第三个分区包含所有值在500000和749999之间的记录。其他所有大于或等于750000的记录都包含在第四个分区里。
注意这个例子中使用了“RANGE RIGHT”从句。这说明分界值是在分区的右边。同样,如果使用的是“RANGE LEFT”从句,那么第一个分区就会包含所有值小于或等于250000的记录;第二个分区就会包含所有值在250001和500000之间的记录,如此类推。
第二个步骤:建立分区方案
一旦建立完定义如何对数据进行分区的分区函数之后,下一步就是建立一个分区方案,定义[u]where[/u],即你想在哪里对数据进行分区。这是一个很直接明了的过程,例如,如果我有四个文件组,名称分别从“fg1”到“fg4”,那么就可以使用以下分区方案:
CREATE PARTITION SCHEME customer_partscheme
AS PARTITION customer_partfunc
TO (fg1, fg2, fg3, fg4)
注意我们现在把一个分区函数连接到了分区方案,但是我们还没有把分区方案连接到任何具体的数据库表格。这就是重复使用功能发挥功能的时候。我们可以通过这个功能把分区方案(或者只是分区函数)用于数据库表格的任何数据上。
第三个步骤:对表格进行分区
建立好分区方案之后,就可以开始对表格进行分区了。这是最简单的一个步骤,只需要在表格创建语句中添加“ON”从句,指定表格分区方案和要应用该分区方案的表列。你不需要指定分区函数,因为分区方案已经定义了分区函数。
举个例子,假设你想要用上述的分区方案来创建一个客户表格,你需要使用以下Transact-SQL语句:
CREATE TABLE customers (FirstName nvarchar(40), LastName nvarchar(40), CustomerNumber int)
ON customer_partscheme (CustomerNumber)
⑵ SQL 2005 如何按月把表分区
创建分碧缺区迟慧悔函数
按月区分的例子 (目前只有前3季度)
CREATE PARTITION FUNCTION sale_date_part_func(DATETIME)
AS RANGE RIGHT FOR VALUES(
CONVERT(DATETIME, '2010-01-01 00:00:00', 120),
CONVERT(DATETIME, '2010-02-01 00:00:00', 120),
CONVERT(DATETIME, '2010-03-01 00:00:00'码正, 120),
CONVERT(DATETIME, '2010-04-01 00:00:00', 120),
CONVERT(DATETIME, '2010-05-01 00:00:00', 120),
CONVERT(DATETIME, '2010-06-01 00:00:00', 120),
CONVERT(DATETIME, '2010-07-01 00:00:00', 120),
CONVERT(DATETIME, '2010-08-01 00:00:00', 120),
CONVERT(DATETIME, '2010-09-01 00:00:00', 120)
);
go
创建分区架构(Schema)
CREATE PARTITION SCHEME sale_date_part_sche
AS PARTITION sale_date_part_func
TO (
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY]
);
go
创建分区表
CREATE TABLE sale_data (
sale_date DATETIME NOT NULL ,
sale_item VARCHAR(2) NOT NULL ,
sale_money DECIMAL(10,2) NOT NULL
) ON sale_date_part_sche(sale_date);
go
⑶ 如何创建SQL Server 2005表分区
创建一个分区表首先要定义你用来映射表内分区的分区函数。在下面定义的分区函数中,我将使用三个分区,每个分区对应于SalesHistoryArchive表中的每一种产品类型,这个表将在稍后定义。基本上,这些分区会把SalesHistoryArchive档案表划分成三个不同的表,它们由SQL Server自动维护。CREATE PARTITION FUNCTION [pf_Proct_Partition](VARCHAR(10)) AS RANGE LEFTFOR VALUES (N'BigScreen', N'Computer', N'PoolTable')定义函数的范围决定分区值属于哪一个边界。RNAGE LEFT:指定分区值将小于或等于在分区函数中定义的值。在上面使用的分区函数中一共建立了四个分区。所有名称小于或等于‘BigScreen’的产品将映射到第一个分区。任何名称大于‘BigScreen’但小于或等于‘Computer’的产品将映射到第二个分区;诸如此类。RANGE RIGHT:指定分区值将小于在分区函数中定义的值。在上面使用的分区函数中一共建立了四个分区。所有名称小于‘BigScreen’的产品将映射到第一个分区。任何名称大于或等于‘BigScreen’但小于或等于‘Computer’的产品将映射到第二个分区;诸如此类。建好分区函数后,现在我需要建立分区方案。我将把例子中的所有分区都映射到主文件组中。如果我希望将分区映射到不同的文件组,我会按文件组列表的顺序加入文件组名称。下面是创建分区方案的代码:CREATE PARTITION SCHEME [ps_Proct_Scheme] AS PARTITION[pf_Proct_Partition]ALL TO ([PRIMARY])现在我建立需要分区的表,我可以创建SalesHistoryArchive表并在其中加载数据。在CREATE TABLE语句末尾,分区方案使用表中的一个字段名告诉SQL Server如何映射需要分区的表中的数据。查看列表A中的代码样本。我需要对数据进行一些查询,保证分区正常运行。下面的查询返回SalesHistoryArchive表的所有行,并使用$partition函数指出返回的行属于哪个分区:SELECT $partition.[pf_Proct_Partition](Proct), *FROM SalesHistoryArchive这个查询返回所有映射到SalesHistoryArchive表中的分区:SELECT * From sys.partitionsWHERE OBJECT_NAME(object_id) = 'SalesHistoryArchive'接下来…在后面的文章中,我将解释如何修改表中的这些分区,从而在其中增加新数据,并非常高效地删除旧数据。
⑷ sql server怎么建立分区表
打开MsSQL2008,找到作业该项,如果打不开或者SQL Server代理是未启动状态,请先在windows服务中启动SQL Server代理(参考图片),
2
右击MsSQL2008对象资源管理器中的作业,选择新建作业,输入该作业你想用的名称,类别不用管,说明里面是输入一些该作业完成的功能,可不写,请务必勾选已启用复选框.
3
点击新建作业窗体左侧的步骤项,点击右侧区域下方的新建按钮,输入步骤名称,类型请选择Transact-SQL脚本(T-SQL),运行身份默认,数据库请选择要进行分区的数据库,请不要选择master默认的,命令文本框中输入如下代码:
/*--------------------创建数据库的文件组和物理文件------------------------*/
declare @tableName varchar(50), @fileGroupName varchar(50), @ndfName varchar(50), @newNameStr varchar(50), @fullPath
varchar(50), @newDay varchar(50), @oldDay datetime, @partFunName varchar(50), @schemeName varchar(50)
set @tableName='要分区的数据库名称'
set @newDay=CONVERT(varchar(100), GETDATE(), 23)--23:按天 114:按时间
set @oldDay=cast(CONVERT(varchar(10),dateadd(day,-1,getdate()), 120 ) as datetime)
set @newNameStr=Replace(Replace(@newDay,':','_'),'-','_')
set @fileGroupName=N'G'+@newNameStr
set @ndfName=N'F'+@newNameStr+''
set @fullPath=N'E:\\SQLDataBase\\UserData\\'+@ndfName+'.ndf'
set @partFunName=N'pf_Time'
set @schemeName=N'ps_Time'
--创建文件组
if exists(select * from sys.filegroups where name=@fileGroupName)
begin
print '文件组存在,不需添加'
end
else
begin
exec('ALTER DATABASE '+@tableName+' ADD FILEGROUP ['+@fileGroupName+']')
print '新增文件组'
if exists(select * from sys.partition_schemes where name =@schemeName)
begin
exec('alter partition scheme '+@schemeName+' next used ['+@fileGroupName+']')
print '修改分区方案'
end
if exists(select * from sys.partition_range_values where function_id=(select function_id from
sys.partition_functions where name =@partFunName) and value=@oldDay)
begin
exec('alter partition function '+@partFunName+'() split range('''+@newDay+''')')
print '修改分区函数'
end
end
--创建NDF文件
if exists(select * from sys.database_files where [state]=0 and (name=@ndfName or physical_name=@fullPath))
begin
print 'ndf文件存在,不需添加'
end
else
begin
exec('ALTER DATABASE '+@tableName+'ADD FILE (NAME ='+@ndfName+',
FILENAME = '''+@fullPath+''')TO FILEGROUP ['+@fileGroupName+']')
print '新创建ndf文件'
end
/*--------------------以上创建数据库的文件组和物理文件------------------------*/
--分区函数
if exists(select * from sys.partition_functions where name =@partFunName)
begin
print '此处修改需要在修改分区函数之前执行'
end
else
begin
exec('CREATE PARTITION FUNCTION '+@partFunName+'(DateTime)AS RANGE RIGHTFOR VALUES ('''+@newDay
+''')')
print '新创建分区函数'
end
--分区方案
if exists(select * from sys.partition_schemes where name =@schemeName)
begin
print '此处修改需要在修改分区方案之前执行'
end
else
begin
exec('CREATE PARTITION SCHEME '+@schemeName+' AS PARTITION '+@partFunName+' TO
(''PRIMARY'','''+@fileGroupName+''')')
print '新创建分区方案'
end
print '---------------以下是变量定义值显示---------------------'
print '当前数据库:'+@tableName
print '当前日期:'+@newDay+'(用作随机生成的各种名称和分区界限)'
print '合法命名方式:'+@newNameStr
print '文件组名称:'+@fileGroupName
print 'ndf物理文件名称:'+@ndfName
print '物理文件完整路径:'+@fullPath
print '分区函数:'+@partFunName
print '分区方案:'+@schemeName
/*
--查看创建的分区函数
select * from sys.partition_functions
--查看分区函数的临界值
select * from sys.partition_range_values
--查询分区方案
select * from sys.partition_schemes
--查询表数据在哪个分区中存储,where条件查询第一个分区中存在的数据
select *,$partition.pf_SaveTime(分区字段) as Patition from 表名 where $partition.pf_SaveTime(分区字段)=1
*/
GO
点击确定按钮
上述代码中的变量名称,路径等均可自行修改,上述是按天为单位,以G开头的日期作为文件组名称,以F开头的日期作为物理分区文件名即ndf文件名称
4
选择新建分区左侧的计划项,然后点击右侧区域下方的新建按钮,设定新建分区的时间间隔,图中设置的是每天创建一个新的分区,用户也可以自行修改,按月,按周,按自定义时间等
其他的条目,通知,警报,目标可自行设置,也可不设置,至此自动创建分区的计划任务已成功设置.
END
步骤二:对表应用分区方案和分区函数
右击要分区的表,选择存储菜单下的创建分区,上述步骤一中创建的分区函数是按datetime类型进行的分区,所以创建分区的时候需要选择相应类型的字段作为分区依据,用户也可以根据int型或其他类型的字段进行分区,选择下一步,使用现有分区函数下一步使用现有分区方案,下一步会自动按照分区方案执行的日期进行分区,继续点击下一步选择立即执行,完成后即可完成的整体的表分区自动执行.
需注意:刚设置完第一步的计划任务,可能不会执行第一步的分区方案的代码,也就意味着没有创建分区函数和分区方案,第二步设置的时候使用现有分区函数和使用现有分区方案也就不可用,可先把第一步的代码执行一遍即可.
⑸ 如何对已经存在的数据表进行分区
过程中为SQL Server数据表划分为三个步骤:
1)建立分区函数
2)建立分区方案
3)对表的分区
第一步:建立分区函数
分区函数定义[U]如何[/ U],也就是你想怎么SQL Server数据分区。这里不是一个特定的表作为一个例子,但总的技术部门总结的数据。
分区指定为每个分区用分区边界来实现。例如,假设我们有一个客户表,其中包含所有的企业客户信息,客户信息与客户的唯一标识号,客户编号从1到100万。我们可以使用下面的分区功能(这里称为customer_Partfunc)把这个表分为四个分区:
CREATE PARTITION FUNCTION customer_partfunc(INT)
AS RANGE RIGHT
输入值( 250000,500000,750000)
这些边界划分指定了四个分区。第一个分区包含所有值?少于25万的记录。第二个分区包含所有值?之间250,000和499,999的记录。第三个分区包含所有值?500,000至749,999记录。大于或等于750,000的所有其他记录都包含在第四个分区中。
请注意,此示例使用“RANGE RIGHT”条款。这表明,该边界值是分区的右侧。同样,如果您使用“RANGE LEFT”条款,那么第一个分区将包含所有的值小于或等于25万条记录;?第二个分区将包含所有的值250001和500000之间的记录,等等??
第二步:创建
分区方案
一旦如何分区功能分区后的数据完整的定义,下一步是创建一个分区方案,定义[ U],其中[/ U],这就是你要分区的数据。这是一个非常简单的过程,例如,如果我有四个文件组,从“FG1”到“FG4”的名字,那么你可以使用下面的分区方案:
创建分区计划customer_partscheme
作为间隔customer_partfunc
要(FG1,FG2,FG3,FG4)
请注意,我们现在把一个分区函数连接到分区规划,但我们还没有连接在分区方案的任何具体的数据库表。这是重复使用的功能函数时。我们可以利用这个功能来分区方案(或只是一个分区函数)对数据库表的任何数据。
第三步:表已分区
建立良好的分区方案后,就可以开始对表进行分区。这是最简单的一步,只需加上“ON”子句中的表创建语句指定表的分区方案,并申请表列的分区方案。你不需要指定分区函数,分区方案已经因为分区函数定义。
例如,假设你想使用上述的分区方案来创建一个客户表,您需要使用以下Transact-SQL语句:
CREATE TABLE客户(姓数据类型为nvarchar(40),姓氏为nvarchar(40),CUSTOMERNUMBER INT)
开customer_partscheme(CUSTOMERNUMBER)
⑹ 如何用SQL创建一个表格
1、打开SQLServer,在数据库处,右键数据库,点击新建数据库。
2、然后,命名为LX,点击确定,创建数据库,如图所示。
3、创建完,没有看到新建数据库的,在数据库那右键,刷新。如图所示就出来了。
4、接着,找到LX数据库下的表,右键,新建表,如图所示。
5、比如建立一个简单的部门表,简单部门表包含(部门编号、部门名),SQLServer
是可以用中文做列名的,但是为了能够被他人看懂,我们一般用英文,如图所示,
DepertNo,DepertName,我喜欢在列名前加一个fld_,个人养成的一种习惯,看自己的习惯吧。因为我们有时候转换成英文,可能会与SQL的某些关键字起冲突,因此我加了个fld_。此外讲一下varchar为类型,10为长度,2个长度为1个汉字。
6、表设置主键,每个表只能有一个主键,右键表的最左侧,点击设置主键,最右边为空自动去勾,主键是不能为空的。一般部门号不会为空,部门名也是不会为空,所以也去掉勾,不允许为null。
7、输入好列后,右键标题,然后点击保存Table_1,如图所示,表名前我习惯加TBL_。
8、如图所示,为SQL语句创建表。
⑺ SQL server 表分区问题,大家帮忙看看吧,谢啦
你第一个句子应该是创建了三个分区:<='01/01/2007'、<='01/01/2008'并且>'01/01/2007'、>'01/01/2008',所以下面的名称应该是三个就够了(FG1,FG2,FG3)
参考:
SQL Server数据库表分区操作过程由三个步骤组成:
1. 创建分区函数
2. 创建分区架构
3. 对表进行分区
下面将对每个步骤进行详细介绍。
步骤一:创建一个分区函数
此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值([u]how[/u])。这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
我们可以通过指定每个分区的边界条件来定义分区。例如,假定我们有一份Customers表,其中包含了关于所有客户的信息,以一一对应的客户编号(从1到1,000,000)来区分。我们将通过以下的分区函数把这个表分为四个大小相同的分区:
_partfunc(int)
ASRANGERIGHT
FORVALUES(250000,500000,750000)
这些边界值定义了四个分区。第一个分区包括所有值小于250,000的数据,第二个分区包括值在250,000到49,999之间的数据。第三个分区包括值在500,000到7499,999之间的数据。所有值大于或等于750,000的数据被归入第四个分区。
请注意,这里调用的"RANGE RIGHT"语句表明每个分区边界值是右界。类似的,如果使用"RANGE LEFT"语句,则上述第一个分区应该包括所有值小于或等于250,000的数据,第二个分区的数据值在250,001到500,000之间,以此类推。
步骤二:创建一个分区架构
一旦给出描述如何分割数据的分区函数,接着就要创建一个分区架构,用来定义分区位置([u]where[/u])。创建过程非常直截了当,只要将分区连接到指定的文件组就行了。例如,如果有四个文件组,组名从"fg1"到"fg4",那么以下的分区架构就能达到想要的效果:
CREATEPARTITIONSCHEMEcustomer_partscheme
ASPARTITIONcustomer_partfunc
TO(fg1,fg2,fg3,fg4)
注意,这里将一个分区函数连接到了该分区架构,但并没有将分区架构连接到任何数据表。这就是可复用性起作用的地方了。无论有多少数据库表,我们都可以使用该分区架构(或仅仅是分区函数)。
步骤三:对一个表进行分区
定义好一个分区架构后,就可以着手创建一个分区表了。这是整个分区操作过程中最简单的一个步骤。只需要在表创建指令中添加一个"ON"语句,用来指定分区架构以及应用该架构的表列。因为分区架构已经识别了分区函数,所以不需要再指定分区函数了。
例如,使用以上的分区架构创建一个客户表,可以调用以下的Transact-SQL指令:
CREATETABLEcustomers(FirstNamenvarchar(40),LastNamenvarchar(40),CustomerNumberint)
ONcustomer_partscheme(CustomerNumber)
关于SQL Server的表分区功能,你知道上述的相关知识就足够了。记住!编写能够用于多个表的一般的分区函数和分区架构就能够大大提高可复用性。