`
wsql
  • 浏览: 11757947 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

MS SQLServer 2005 分区表的使用(表分区)

 
阅读更多

一直以来,都以数据表单表记录数作为标尺,凡是大于100W的则使用Oracle等数据库,小于100W的才考虑使用Microsoft SQLServer.

在SQLServer2000的时候为了能够适应100W以上的数据量,很多设计者选择了手动分区表,创建大量表结构相同的表,来存放相同的记录.

用视图和触发器来模拟出Oracle中的表分区,是一种伪分区.

在SQLServer2005中,分区表出现了,只须三步就能够将数据表实现分区,从而提高单表的操作效率:

1. 创建分区函数

2. 创建分区架构

3. 对表进行分区

下面详细介绍下: 友情提示(对于那些只想快速浏览内容的朋友,只须关注蓝色字体的内容即可)

步骤一:创建一个分区函数

使用 CREATE PARTITION FUNCTION 是创建已分区表或索引的第一步,

语法

CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ] 
FOR VALUES ( [ boundary_value [ ,...n ] ] ) 
[ ; ]

partition_function_name

是分区函数的名称。分区函数名称在数据库内必须唯一,并且符合标识符的规则。

input_parameter_type

是用于分区的列的数据类型。当用作分区列时,除 text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名数据类型或 CLR 用户定义数据类型外,所有数据类型均有效。

实际列(也称为分区列)是在 CREATE TABLE 或 CREATE INDEX 语句中指定的。

boundary_value

为使用 partition_function_name 的已分区表或索引的每个分区指定边界值。如果 boundary_value 为空,则分区函数使用 partition_function_name 将整个表或索引映射到单个分区。只能使用 CREATE TABLE 或 CREATE INDEX 语句中指定的一个分区列。

boundary_value 是可以引用变量的常量表达式。这包括用户定义类型变量,或函数以及用户定义函数。它不能引用 Transact-SQL 表达式。boundary_value 必须与 input_parameter_type 中提供的数据类型相匹配或者可隐式转换为该数据类型,并且如果该值的大小和小数位数与 input_parameter_type 中相应的值的大小和小数位数不匹配,则在隐式转换过程中该值不能被截断。

...n

指定 boundary_value 提供的值的数目,不能超过 999。所创建的分区数等于 n + 1。不必按顺序列出各值。如果值未按顺序列出,则 Microsoft SQL Server 2005 Database Engine 将对它们进行排序,创建函数并返回一个警告,说明未按顺序提供值。如果 n 包括任何重复的值,则数据库引擎将返回错误。

LEFT | RIGHT

指定当间隔值由 数据库引擎 按升序从左到右排序时,boundary_value [ ,...n ] 属于每个边界值间隔的哪一侧(左侧还是右侧)。如果未指定,则默认值为 LEFT。有关详细信息,请参阅示例。

举例:

CREATE PARTITION FUNCTION customer_partfunc(int)
AS RANGE RIGHT FOR VALUES(250000,500000,750000)

图表:

分区 1 2 3 4

Values

col1 <= 250000

col1 >250000 AND col1 <= 500000

col1 > 500000且 col1 <= 750000

col1 > 750000

只要使用customer_partfunc分区函数,就可以按照上图对数据表进行分区

步骤二:创建一个分区架构

在当前数据库中创建一个将已分区表或已分区索引的分区映射到文件组的方案。使用CREATE PARTITION SCHEME创建分区架构是创建已分区表或索引的第二步.

语法

CREATE PARTITION SCHEME partition_scheme_name
AS PARTITION partition_function_name
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )
[ ; ]

partition_scheme_name

分区方案的名称。分区方案名称在数据库中必须是唯一的,并且符合标识符规则。

partition_function_name

使用分区方案的分区函数的名称。分区函数所创建的分区将映射到在分区方案中指定的文件组。partition_function_name 必须已经存在于数据库中。

ALL

指定所有分区都映射到在 file_group_name 中提供的文件组,或映射到主文件组(如果指定了 [PRIMARY]。如果指定了 ALL,则只能指定一个 file_group_name。

file_group_name | [ PRIMARY ] [ ,...n]

指定用来持有由 partition_function_name 指定的分区的文件组的名称。file_group_name 必须已经存在于数据库中。

如果指定了 [PRIMARY],则分区将存储于主文件组中。如果指定了 ALL,则只能指定一个 file_group_name。分区分配到文件组的顺序是从分区 1 开始,按文件组在 [,...n] 中列出的顺序进行分配。在 [,...n] 中,可以多次指定同一个 file_group_name。如果 n 不足以拥有在 partition_function_name 中指定的分区数,则 CREATE PARTITION SCHEME 将失败,并返回错误。

如果 partition_function_name 生成的分区数少于文件组数,则第一个未分配的文件组将标记为 NEXT USED,并且出现显示命名 NEXT USED 文件组的信息。如果指定了 ALL,则单独的 file_group_name 将为该 partition_function_name 保持它的 NEXT USED 属性。如果在 ALTER PARTITION FUNCTION 语句中创建了一个分区,则 NEXT USED 文件组将再接收一个分区。若要再创建一个未分配的文件组来拥有新的分区,请使用 ALTER PARTITION SCHEME。

在 file_group_name[ 1,...n] 中指定主文件组时,必须像在 [PRIMARY] 中那样分隔 PRIMARY,因为它是关键字。

举例:

CREATE PARTITION SCHEME customer_partscheme
  AS PARTITION customer_partfunc
  TO(fg1,fg2,fg3,fg4)

图表:

文件组

fg1

fg2

fg3

fg4

分区

1

2

3

4

Values

col1 <= 250000

col1 >250000 AND col1 <= 500000

col1 > 500000 AND col1 <= 750000

col1 > 750000

步骤三:对一个表进行分区

  定义好一个分区架构后,就可以着手创建一个分区表了。这是整个分区操作过程中最简单的一个步骤。只需要在表创建指令中添加一个"ON"语句,用来指定分区架构以及应用该架构的表列。因为分区架构已经识别了分区函数,所以不需要再指定分区函数了。

CREATE TABLE customers
(
FirstName nvarchar(40),
LastName nvarchar(40),
CustomerNumber int
)
ON customer_partscheme(CustomerNumber)

对于第二部中的fg1 fg2 fg3 fg4可能有些人不明白,那些是数据库的文件组.

下面再举例说下文件组:

USE master
CREATE DATABASE Sales ON PRIMARY
(
NAME = 'Sales_Data',
FILENAME='C:/Databases/Sales_dat.mdf',
SIZE=3MB,
MAXSIZE=10000MB,
FILEGROWTH=10%
),
FILEGROUP FG1
(
NAME = 'File1',
FILENAME = 'D:/Databases/File1_dat.ndf',
SIZE = 1MB,
MAXSIZE = 10000MB,
FILEGROWTH = 10%
),
FILEGROUP FG2
(
NAME = 'File2',
FILENAME = 'E:/Databases/File2_dat.ndf',
SIZE = 1MB,
MAXSIZE = 10000MB,
FILEGROWTH = 10%
),
FILEGROUP FG3
(
NAME = 'File3',
FILENAME = 'F:/Databases/File3_dat.ndf',
SIZE = 1MB,
MAXSIZE = 10000MB,
FILEGROWTH = 10%
) ,

FILEGROUP FG4
(
NAME = 'File4',
FILENAME = 'G:/Databases/File4_dat.ndf',
SIZE = 1MB,
MAXSIZE = 10000MB,
FILEGROWTH = 10%
)
LOG ON
(
NAME = 'Sales_Log',
FILENAME = 'C:/Databases/Sales_Log.ldf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%
)

上面这个T-sql语句创建了一个数据库,并且这个数据拥有4个附加文件组.这四个文件组分部在不同的物理硬盘分区上.

可以设想下,C盘D盘E盘F盘和G盘如果是单独的rad5硬盘塔,这就是5个分区*3块硬盘,15块硬盘的处理速度,而且服务器硬盘式1.5W转的,处理千万行这样的大行级数据库就没有什么问题了.

分享到:
评论

相关推荐

    MS SQL Server分区表、分区索引详解

    MS SQL Server:分区表、分区索引 详解 1. 分区表简介 使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。  大型表:数据量巨大的表。  访问模式:因目的不同,需访问的...

    MS SQL SERVER 分区表

    详细介绍SQLSERVER数据库分区理论,最后举例说明如果分区。

    MS SQL Server中大数据量表的查询优化

    在MS SQL Server中如何处理记录条数2000万以上且每日增加20万条的数据表,相信是很多开发人员面临的难题.本文以实际案例描述了此问题的解决方法及其存在的问题.在SQL Server 2000中,可以通过分区视图的定义来支持...

    MSSQLServer:分区表、分区索引详解[归类].pdf

    MSSQLServer:分区表、分区索引详解[归类].pdf

    MSSQL数据库修复软件:Recovery Toolbox for SQL Server 2.2.11.0

    2、从不同版本的Microsoft SQL Server修复损坏的SQL Server数据库:SQL Server 7/2000/2005/2008/2008 R2 / 2012/2014 3、恢复MS SQL数据库中最重要和最有价值的元素:数据类型,表数据,视图,存储过程,自定义...

    MS SQL SERVER恢复工具

    MS SQL SERVER恢复工具是一款SQL碎片级恢复程序,纯API底层级获取磁盘扇区,纯底层扫描SQL碎片,纯底层获取分区结构,支持GPT/MBR分区表,分区结构支持:NTFS,FAT32/16,exFAT等并支持解析空余空间,检测MDF功能支持...

    达思数据恢复(D-Recovery Standard)2.0 绿色破解版

    1、 恢复分区表(由于病毒、一键恢复、误ghost、重新分区、误删除分区等原因造成分区丢失)。 2、 恢复删除文件(Shift+Del 直接删除文件、清空回收站等彻底删除文件以后的数据恢复)。 3、 分区格式化后的数据恢复(误...

    Oracl技术资料(EBook)

    电子版的Oracl技术资料 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-...46.Oracle 数据库向 MS SQL Server 7.0 的迁移

    Oracle数据库学习指南

    46.Oracle 数据库向 MS SQL Server 7.0 的迁移 Oracle1: 1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. Exp-Imp大量数据 5. Export-Import 使用技巧与常见错误 6. ...

    网管教程 从入门到精通软件篇.txt

    如果系统检测到无效或非标准分区表标记,将提示用户是否继续执行该命令。除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。  format  将指定的驱动器...

    最全的oracle常用命令大全.txt

    使用INPUT命令可以在SQL缓冲区中增加一行或多行 SQL&gt;i SQL&gt;输入内容 e、调用外部系统编辑器 SQL&gt;edit 文件名 可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_...

    JAVA上百实例源码以及开源项目

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    JAVA上百实例源码以及开源项目源代码

     [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP ...

    Windows 系统错误代码简单分析

     0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。  0131 试图将文件指针移至文件开头之前。  0132 无法在指定的设备或文件中设置文件指针。  0133 对于包含已连接驱动器的驱动器,不能...

    网吧维护技术资料 合集

    5239 网吧维护\资料\FW\ASP实现对SQL SERVER 数据库的操作.TXT 2945 网吧维护\资料\FW\MYSQL.TXT 11239 网吧维护\资料\FW\WIN2000SERVER安全设置的一些小技巧.TXT 0 网吧维护\资料\FW\WWW.TXT 6103 网吧维护\资料\FW...

Global site tag (gtag.js) - Google Analytics