热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

为sqlserver进行表分区

为sqlserver进行表分区最近项目中数据量超过的千万级别,一个普通单表查询也慢的要命,对客户来说长时间的等待是不能容忍的。于是想尽各种办法对数据库进行优化,包括索引,单表查询等等。但结果都不近人意。最终选择对单表进行分区。经过测试,效率确实提

为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,

     UserName  nvarchar(50) not null
    ) ON MytestPartFunction(ID)

    后面的MytestPartFunction就是分区架构。其中括号中的ID表示以ID作为分区依据。

  这样一个完整的分区表就完成了。其中有些细节没有说明。以后慢慢完善吧。本人对数据库了解的不太多,大部分东西都是从网上现找的,可能其中有些不足。恳请大家指正。

posted on

推荐阅读
author-avatar
往事不可味nd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有