为sql server进行表分区 最近项目中数据量超过的千万级别,一个普通单表查询也慢的要命,对客户来说长时间的等待是不能容忍的。于是想尽各种办法对数据库进行优化,包括索引,单表查询等等。但结果都不近人意。最终选择对单表进行分区。经过测试,效率确实提
为sql server进行表分区
最近项目中数据量超过的千万级别,一个普通单表查询也慢的要命,,对客户来说长时间的等待是不能容忍的。于是想尽各种办法对数据库进行优化,包括索引,单表查询等等。但结果都不近人意。最终选择对单表进行分区。经过测试,效率确实提高了不少。
创建分区表一般包括四个步骤。
1:为分区创建文件组和文件
2:设计分区函数
3:设计分区架构
4:创建分区表
(1) 创建文件组和文件可以用sql创建,也可以通过管理工具创建具体方法如下:
1:管理工具:
打开management studio,选择要操作的数据库右键-属性-文件/文件组。根据相应的提示创建即可
2:通过sql创建
创建文件组:alter database mytest add filegroup mytestfilegroup ,其中mytest是当前操作的数据库,mytestfilegroup是文件组名称
创建文集并将文件添加到文件组:
alter database mytest add file
(
filegrowth=1mb,
name='mytest0' ,
filename='c:\data\mytest0.ndf',
size=3mb
)to filegroup mytestfilegroup
通过一上操作,我们已经创建了一个名为mytestfilegroup的文件组以及文件组下面的文件mytest0.ndf,文件的存放位置在c盘的data文件夹下。可以将不同文件存放 在不同的磁盘下面,这样可以提高io效率,增加查询速度。
(2) 创建完成文件组和文件之后我们便可以设计分区函数了。直接上sql:
create partition function mytestpartfunction (int)
as range right
for values
(2000000,4000000,6000000,8000000,10000000,12000000,14000000,16000000,18000000,20000000)
其中mytestpartfunction是函数名称。range right表示分区的边界处理方式,这里right表示以右边界为准,既边界值分到右边的分区中。
分区依据是根据int类型的值。
(3)创建完分区函数后,就要进行分区架构设计了。分区架构根据分区函数将不同的分区对应到不同的文件组。以达到不同分区数据存放到不同文件。分区架构代码如下:
create partition scheme mytestpartfunction
as partition mytestpartfunction
to
(mytestfilegroup0,mytestfilegroup1,mytestfilegroup2,mytestfilegroup3,mytestfilegroup4,mmytestfilegroup5,mytestfilegroup6,mytestfilegroup7,mytestfilegroup8,mytestfilegroup9,mytestfilegroup10)
mytestpartfunction 是分区架构名称。mytestpartfunction是刚刚创建的分区函数名称,这里表示分区架构是以该函数进行分区。后面的mytestfilegroup0-mytestfilegroup10分别代表将不同的区域内的数据存放到不同的文件组。
(4) 创建完成分区函数和分区架构之后,就可以创建分区表了。创建分区表跟创建普通的表差不多。这里用代码实现如下:
create table userinfo (
id int identity,
usercode nvarchar(50) not null,
usernamenvarchar(50) not null
) on mytestpartfunction(id)
后面的mytestpartfunction就是分区架构。其中括号中的id表示以id作为分区依据。
这样一个完整的分区表就完成了。其中有些细节没有说明。以后慢慢完善吧。本人对数据库了解的不太多,大部分东西都是从网上现找的,可能其中有些不足。恳请大家指正。
posted on
