创建sql server 2005 分区表实例
SQL Server 2005 表分区操作详解
SQL Server 2005 表分区操作详解SQL Server数据库表分区操作过程由三个步骤组成:1. 创建分区函数2. 创建分区架构3. 对表进行分区下面将对每个步骤进行详细介绍。
步骤一:创建一个分区函数此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值([u]how[/u])。
这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
我们可以通过指定每个分区的边界条件来定义分区。
例如,假定我们有一份Customer s表,其中包含了关于所有客户的信息,以一一对应的客户编号(从1到1,000,000)来区分。
我们将通过以下的分区函数把这个表分为四个大小相同的分区:这些边界值定义了四个分区。
第一个分区包括所有值小于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",那么以下的分区架构就能达到想要的效果:注意,这里将一个分区函数连接到了该分区架构,但并没有将分区架构连接到任何数据表。
这就是可复用性起作用的地方了。
无论有多少数据库表,我们都可以使用该分区架构(或仅仅是分区函数)。
SQL Server 2005中的分区表
(一):什么是分区表?为什么要用分区表?如何创建分区表?如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。
1、数据库中某个表中的数据很多。
很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。
当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了。
如果非要我说一个数值的话,我认为是100万条。
2、但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但是这一千万条记录都是常用的记录,那么最好也不要使用分区表,说不定会得不偿失。
只有你的数据是分段的数据,那么才要考虑到是否需要使用分区表。
3、什么叫数据是分段的?这个说法虽然很不专业,但很好理解。
比如说,你的数据是以年为分隔的,对于今年的数据而言,你常进行的操作是添加、修改、删除和查询,而对于往年的数据而言,你几乎不需要操作,或者你的操作往往只限于查询,那么恭喜你,你可以使用分区表。
换名话说,你对数据的操作往往只涉及到一部分数据而不是所有数据的话,那么你就可以考虑什么分区表了。
那么,什么是分区表呢?简单一点说,分区表就是将一个大表分成若干个小表。
假设,你有一个销售记录表,记录着每个每个商场的销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧。
2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表。
那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少。
但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度。
以添加记录为例,以上5个表是独立的5个表,在不同时间添加记录的时候,程序员要使用不同的SQL 语句,例如在2011年添加记录时,程序员要将记录添加到2011年那个表里;在2012年添加记录时,程序员要将记录添加到2012年的那个表里。
使用SQL_Server2005创建数据库和表
1、使用SQL Server2005数据库管理系统创建数据库和表
在本练习中,将使用SQL Server2005数据库管理系统创建Student数据库,并在Login数据库中创建表Login,使你能够掌握使用SQL Server2005数据库管理系统创建数据库和表的方法。
1)启动SQL Server2005:
依次单击开始->所有程序->SQL Server 2005->SQL Server Management Studio Express 。
启动SQL Server 2005数据库管理系统
2)登录数据库服务器:
点击“连接到服务器“对话框中的“连接”按钮连接到SQL Server 2005数据库服务器。
3)创建数据库Login
在SQL Server 2005数据库管理系统的左边栏“对象资源管理器”中右击数据库对象,在弹出的快捷菜单中单击“新建数据库”命令。
在弹出的“新建数据库”对话框右侧的数据库名称中输入数据库名称“Login”,然后单击确定。
4)在Login数据库中新建表”Login”
单击SQL Server 2005数据库管理系统的左侧的“对象资源管理器”栏中的”刷新”按钮,以显示出新建的数据库“Login”。
依次展开左侧栏对象资源管理器中的“数据库”->“Login”,并右击Login数据库中的表项目,在弹出的快捷菜单中单击“新建表”命令。
单击文件菜单中的保存命令保存该表,并取名为“Login”。
实验4 SQL Server 2005创建数据类型和表
实验4创建数据类型和表4.1课堂练习:创建数据类型目标本次课堂练习的目标是能够创建基于系统提供的类型的别名类型。
您将使用SQL Server Management Studio 中的对象资源浏览器或使用CREATE TYPETransact-SQL 语句创建别名类型。
本次课堂练习将使用这两种技术在AdventureWorks 数据库中创建别名类型。
使用SQL Server Management Studio 创建别名类型执行以下步骤以使用SQL Server Management Studio 创建别名数据类型:1.单击“开始”,指向“所有程序”,指向“Micr osoft SQL Server 2005”,然后单击“SQL Serv er Manag ement Studio”。
2.在“连接到服务器”对话框中,指定下表中的值,然后单击“连接”。
属性值服务器类型数据库引擎服务器名称本地服务器身份验证Windows 身份验证3.如果“对象资源管理器”不可见,则单击“视图”菜单上的“对象资源管理器”。
4.在对象资源管理器中,依次展开“数据库”、“Adv e ntureWork s”、“可编程性”和“类型”。
5.右键单击“用户定义数据类型”,然后单击“新建用户定义数据类型”。
6.在“新建用户定义数据类型”对话框中,输入下表中的详细信息,然后单击“确定”。
属性值架构dbo名称Countr yCode数据类型char长度2允许空值选中7. 验证CountryCode 数据类型是否已显示在“用户定义数据类型”列表中。
使用Transact-SQL 创建别名类型执行以下步骤以使用Transact-SQL 创建用户定义数据类型:1.在SQL Server Management Studio 中,单击工具栏上的“新建查询”按钮。
2.在新的空白查询窗口中,创建一个数据类型为nvarchar(50),它的别名为“dbo.EmailAddress”。
SQL SERVER利用分区对大数据表处理操作手册
SQL SERVER 2005利用分区对大数据表处理操作手册超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。
而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。
这不但影响着数据库的运行效率,也增大数据库的维护难度。
除了表的数据量外,对表不同的访问模式也可能会影响性能和可用性。
这些问题都可以通过对大表进行合理分区得到很大的改善。
当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分来提高系统的运行效率。
如果系统有多个CPU或是多个磁盘子系统,可以通过并行操作获得更好的性能。
所以对大表进行分区是处理海量数据的一种十分高效的方法。
本文通过一个具体实例,介绍如何创建和修改分区表,以及如何查看分区表。
SQL Server 2005是微软在推出SQL Server 2000后时隔五年推出的一个数据库平台,它的数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。
此外SQL Server 2005结合了分析、报表、集成和通知功能。
这使企业可以构建和部署经济有效的BI解决方案,帮助团队通过记分卡、Dashboard、Web Services 和移动设备将数据应用推向业务的各个领域。
无论是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005都可以提供出创新的解决方案,并可从数据中获得更多的益处。
它所带来的新特性,如T-SQL的增强、数据分区、服务代理和与.NetFramework的集成等,在易管理性、可用性、可伸缩性和安全性等方面都有很大的增强。
表分区的具体实现方法:表分区分为水平分区和垂直分区。
水平分区将表分为多个表。
每个表包含的列数相同,但是行更少。
例如,可以将一个包含十亿行的表水平分区成12个表,每个小表表示特定年份内一个月的数据。
任何需要特定月份数据的查询只需引用相应月份的表。
而垂直分区则是将原始表分成多个只包含较少列的表。
SqlServer2005对现有数据进行分区具体步骤
SqlServer2005对现有数据进行分区具体步骤RegMail是用来存放注册邮件的表,现以创建时间(CreateTime)字段来给表进行分区,具体步骤如下:--为分区创建存储文件ALTER DATABASE Test ADD FILEGROUP RegMailFile查看数据库的文件组能看到如下图:--为文件组设置存储文件ALTER DATABASE Test ADD FILE (NAME = 'RegMailFile2007', FILENAME ='E:\Data\RegMailFile2007.NDF') TO FILEGROUP RegMailFile;ALTER DATABASE Test ADD FILE (NAME = 'RegMailFile2008', FILENAME ='E:\Data\RegMailFile2008.NDF') TO FILEGROUP RegMailFile;ALTER DATABASE Test ADD FILE (NAME = 'RegMailFile2009', FILENAME ='E:\Data\RegMailFile2009.NDF') TO FILEGROUP RegMailFile;查看数据库的存储文件能看到如下图:--创建分区函数F EXISTS (SELECT*FROM sys.partition_functions WHERE name = N'test_partition')DROP PARTITION FUNCTION[test_partition]CREATE PARTITION FUNCTION pf_RegMail(datetime)ASRANGE RIGHT FOR VALUES ( ' 20070101 00:00:00 ' ,'20080101 00:00:00')创建完了在分区函数中可以看到刚创建好的pf_RegMail如果创建后想对分区函数进行修改可以用如下访求 :--修改分区函数(拆分)alter PARTITION FUNCTION pf_RegMail()split RANGE ('20090101 00:00:00');--修改分区函数(合并)ALTER PARTITION FUNCTION pf_RegMail()MERGE RANGE ('20080101 00:00:00');--创建分区方案/*看分区方案是否存在,若存在先drop掉*/IF EXISTS (SELECT*FROM sys.partition_schemes WHERE name = N'test_scheme') DROP PARTITION SCHEME test_schemeCREATE PARTITION SCHEME ps_RegMailAS PARTITION pf_RegMail TO (RegMail2007,RegMail2008,RegMail2009)CREATE PARTITION SCHEME MonthDateRangeSchemeASPARTITION MonthDateRangeALL TO ([PRIMARY])如果想去分区方案进行修改--修改分区方案ALTER PARTITION SCHEME ps_RegMailNEXT USED RegMail2010;--创建分区表CREATE TABLE [dbo].[PARTITIONERegMail]([id] [int] IDENTITY(1,1) NOT NULL,[CreateTime] [datetime] NOT NULLCONSTRAINT [PK_PARTITIONERegMail] PRIMARY KEY NONCLUSTERED([id] ASC)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [ps_RegMail]([CreeateTime])--此为关键步骤,将现有数据存入上面所建的文件中ALTER TABLE [dbo].[RegMail]WITH NOCHECK ADDCONSTRAINT [PK_RegMail] PRIMARY KEY CLUSTERED([CreateTime]) ON [ps_RegMail]([CreateTime])--如果原来的表里有主键哪就要执行下面语句:alter table RegEmail drop constraint PK_RegEmail--将表的主键删除--4. --对已经存在的表进行分区设置ALTER TABLE dbo.d_depot_inoutDROP CONSTRAINT PK_d_depot_inoutWITH(MOVE TO ps_d_depot_inout(statdate))ALTER TABLE d_depot_inoutADDPRIMARY KEY NONCLUSTERED(depot,statdate,itemno)ON ps_d_depot_inout(statdate)GO--查寻数据所在文件组--最后看看结果。
SQL Server 2005 中的分区表和索引
SQL Server 2005 中的分区表和索引SQL Server 2005发布日期: 3/24/2005 | 更新日期: 3/24/2005Kimberly L. Tripp 的创始人适用于:SQL Server 2005摘要:SQL Server 2005 中基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能。
追溯从逻辑分区表和手动分区表的功能到最新分区功能的发展历程,探索为什么、何时以及如何使用SQL Server 2005 设计、实现和维护分区表。
(本文包含一些指向英文站点的链接。
)关于本文本文所描绘的功能和计划是下一版本SQL Server 的开发方向。
它们并非本产品的说明书,如有更改,恕不另行通知。
对于最终产品是否具有这些功能不做任何明示或暗示的保证。
对于某些功能,本文假设读者熟悉SQL Server 2000 功能和服务。
有关背景信息,请访问SQL Server 网站或SQL Server 2000 资源工具包。
这并不是产品说明书。
下载相关的代码示例SQL2005PartitioningScripts.exe。
本页内容为什么要进行分区?分区的发展历史定义和术语创建分区表的步骤融会贯通:案例研究总结为什么要进行分区?什么是分区?为什么要使用分区?简单的回答是:为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。
通常,创建表是为了存储某种实体(例如客户或销售)的信息,并且每个表只具有描述该实体的属性。
一个表对应一个实体是最容易设计和理解的,因此不需要优化这种表的性能、可伸缩性和可管理性,尤其是在表变大的情况下。
大型表是由什么构成的呢?超大型数据库(VLDB) 的大小以数百GB 计算,甚至以TB 计算,但这个术语不一定能够反映数据库中各个表的大小。
大型数据库是指无法按照预期方式运行的数据库,或者运行成本或维护成本超出预定维护要求或预算要求的数据库。
这些要求也适用于表;如果其他用户的活动或维护操作限制了数据的可用性,则可以认为表非常大。
SqlServer数据库分区分表实例分享(有详细代码和解释)
SqlServer数据库分区分表实例分享(有详细代码和解释)数据库单表数据量太⼤可能会导致数据库的查询速度⼤⼤下降(感觉都是千万级以上的数据表了),可以采取分区分表将⼤表分为⼩表解决(当然这只是其中⼀种⽅法),⽐如数据按⽉、按年分表,最后可以使⽤视图将⼩表重新并为总的虚拟表,其实并不影响上层程序的使⽤(程序也许都不知道分表了)。
主要步骤:1、新建⽂件组,将数据表⽂件保存路径指向相应⽂件组(应将⽂件组和⽂件放⼊不同的磁盘中,甚⾄不同服务器形成分布式数据库,因为数据的读取瓶颈很⼤程度在于磁盘的的读写速度,多个磁盘存放⼀个表可以负载均衡)2、设置分区函数(声明分区的标准)3、设置分区⽅案(即哪些区域使⽤哪个分区函数,形成完整的分区⽅案)4、给新表或现有表设置分区⽅案5、建⽴视图详细步骤(看需求可选):⼀、数据库状态备份和恢复USE master-- 备份BACKUP DATABASE AdventureWorksTO DISK = 'AdventureWorks.bak'WITH FORMAT---- 恢复RESTORE DATABASE AdventureWorksFROM DISK = 'AdventureWorks.bak'WITH REPLACEGO⼆、⽂件组和⽂件操作添加⽂件组USE [master]GOALTER DATABASE ZHH ADD FILEGROUP [⽂件组名称]Go添加⽂件并把其指向指定⽂件组USE master;GOALTER DATABASE 数据库名ADD FILE(NAME=N'⽂件名',FILENAME='存放路径', //如:E:\201109.NDF(精确到⽂件名)⽂件组存放与不同磁盘可以提⾼IO读写效率(多个磁头并发)SIZE=3MB,MAXSIZE=100MB,FILEGROWTH=5MB)TO FILEGROUP [⽂件组名]Go修改⽂件(可选)USE master;GOALTER DATABASE 数据库名MODIFY FILE(NAME = ⽂件名,SIZE = 20MB); //可以修改所有属性,列举即可GO删除⽂件(可选)ALTER DATABASE 数据库名 REMOVE FILE [⽂件组名]三、分区函数和分区⽅案分区函数⽤于规范如何分区的标准,如已哪列进⾏为标准分区、分区的⽅式(按时间、ID等)、分区的具体界限(⼀般来说,界限指标数要⽐分区数少1,⼀⼑则有两段)USE 数据库名GOCREATE PARTITION FUNCTION 分区函数名 (指标列的数据类型) //如:datetime、intAS RANGE RIGHT //右边界切分,默认为LEFTFOR VALUES (划分界限) //如时间划分('2003/01/01', '2004/01/01'),两个时间界限可划分出三个分区GO分区⽅案⽤于将已经建⽴好的分区函数组织成完整的⽅案,为每个分区分配存储位置Use 数据库名gocreate partition scheme 分区⽅案名as partition 分区函数to(⽂件组1,⽂件组2,⽂件组3,...) //注意分区数要与实际分区⼀致go在原有的基础上添加分区(可选)use 数据库名goalter 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_ProductALTER TABLE Product DROP CONSTRAINT PK_Product//重新创建主键⾮聚集索引PK_ProductALTER TABLE Product ADD CONSTRAINT PK_Product PRIMARY KEY NONCLUSTERED (ProductID ASC)上⾯语句也可直接在索引属性中将聚集改为⾮聚集为新建表设置分区⽅案(可选)//创建表格Order,并设置Scheme_DateTime分区⽅案,指标列为OrderDateCREATE 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 包含分区函数的数据库的名称。
SQLServer高级进阶之分区表创建
SQLServer⾼级进阶之分区表创建⼀、分区表概念1.1、什么是分区表?分区表是在SQL Server 2005之后的版本引⼊的特性,这个特性允许把逻辑上的⼀个表在物理上分为很多部分。
换句话说,分区表从物理上看是将⼀个⼤表分成⼏个⼩表,但是从逻辑上看,还是⼀个⼤表。
1.2、分区与分表的区别分区:就是把⼀张表的数据分成N个区块,从逻辑上看只是⼀张表,但底层是由N个物理区块组成的。
分表:就是把⼀张表按⼀定的规则分解成N个具有独⽴存储空间的实体表。
1.3、⽔平分表与垂直分表的区别⽔平分表:将⼀张表中的数据分成多个表且表结构不变。
垂直分表:将⼀张表按照字段分成不同表且表结构发⽣改变。
⼆、分区表优点2.1、使⽤多个⽂件分布数据到多个硬盘中,可以极⼤地提⾼IO性能。
2.2、多个⽂件对于数据略多的数据库来说,备份和恢复都会轻松很多。
三、分区表场景3.1、数据库中某个表的数据量很⼤,在查询数据时会明显感觉到速度很慢,这种情况可以考虑分区表。
3.2、数据是分段的,如以年份为分隔的数据,对于当前的数据经常进⾏增删改查操作,⽽对于往年的数据⼏乎不做操作或只做查询操作,这种情况可以考虑分区表。
3.3、对数据的操作如果只涉及⼀部分数据⽽⾮全部数据,这种情况可以考虑分区表。
3.4、如果⼀张表的数据经常进⾏增删改查操作,⽽不管年份之类的因素,这种情况最好不要考虑分区表。
四、分区表创建4.1、创建步骤创建分表区的步骤分为5步:1)创建数据库⽂件组2)创建数据库⽂件注:应将⽂件组和⽂件存放于不同的硬盘甚⾄不同的服务器中,因为数据的读取瓶颈很⼤程度在于硬盘的读写速度,多个硬盘存储⼀个表可以实现负载均衡。
3)创建分区函数注:声明分区的标准。
4)创建分区⽅案注:即哪些区域使⽤哪个分区函数,形成完整的分区⽅案。
5)创建分区表4.2、创建实操背景:现以表Sales.SalesOrderHeader作为⽰例,此表有2011-2014年的数据。
MICROSOFTSQL SERVER2005的分区新功能
关键词 : S QL S E RV E R 2 0 0 5 表 分 区 索引 死 锁 中图 分 类 号 : T P 3 文献 标 识 码 : A
文章编 号 : 1 0 0 7 — 9 4 1 6 ( 2 0 1 3 ) 0 1 — 0 1 3 7 — 0 1
随着数据库使用的深入 , 我们 面临着数据库越 来越 大的问题 。 S C HE ME AS P A RTI T I O N p a r f u n c TO ( [ F GI 】 , [ F G 2 】 , [ F G3 ] ) ; 为了解决这一 问题 , 数据库厂家引入 了分区 ( P a r t i t i o n i n g ) 的概念 。 ORAC L E 从8 i 开始就引入了初步 的范 围分 区功 能 , 到1 l g 就扩展 了 I n t e r v a 1 分区- # b 键分 区、 虚拟列 分区、 引入 了分 区建议器等扩展功
括 斗 铹
㈧ l l
设 计 开 发
MI C R OS O F T S Q L S E R V E R 2 0 0 5 的分区新功能
孙 砚 立
( 天津市中医药研究院 天津 3 0 0 1 2 0 )
摘要 : 本 文介绍 了分 区在 微软 数据 库S QL S e r v e r 2 0 0 5 中的 实施和 应 用 , 尤其是 应 用在 海量数 据 的数 据库 上 时 , 可优 化 文件 均衡放 置 , 加快 查
由于在S Q L S e r v e r Ma n a g e me n t S t u d i o ( S S MS ) 中没有 实施
分 区 的 图形 界 面 , 只 能 由我 们进 行 手 工 写 S Q L i  ̄句 进 行 与 分 区有 关 的操 作 。 具体操作步骤 如下 :
SQL Server 2000和SQL Server 2005的分区
SQL Server 2000里的分区--(SQL Server 2005里面的分区技术,为大部分朋友所熟知,但对于SQL Server 2000里面的表分区,很多朋友可能有些迷糊,本方将为大家描述一下SQL Server 2000及SQL Server 20005的分区技术。
其实SQL Server 2000里面本没有真正的分区,但为了弥补这一缺陷,人们利用视图和触发器的组合,创造出一种分区方案,对于这样种分区方案,姑且称之为“伪分区”。
)---------------------------------------------------------------------准备1SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country='Germany'SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country='Mexico'GO--准备2CREATE VIEW v_Customers_Ger_MexASSELECT * FROM CustomersGerUNIONSELECT * FROM CustomersMexGO--创建INSTEAD OF触发器CREATE TRIGGER tr_Customers_Update ON v_Customers_Ger_MexINSTEAD OF UPDATEASDECLARE @Country nvarchar(15)SET @Country=(SELECT Country FROM inserted)IF @Country='Germany'BEGINUPDATE CustomersGer SET CustomersGer.Phone=Inserted.Phone FROM CustomersGerJOIN Inserted ON CustomersGer.CustomerID=Inserted.CustomerIDENDELSE IF @Country='Mexico'BEGINUPDATE CustomersMex SET CustomersMex.Phone=Inserted.Phone FROM CustomersMexJOIN Inserted ON CustomersMex.CustomerID=Inserted.CustomerIDENDGO--测试UPDATE v_Customers_Ger_Mex SET Phone='030-007xfxx' WHERE CustomerID='ALFKI'SELECT CustomerID,Phone FROM v_Customers_Ger_Mex WHERE CustomerID='ALFKI'SELECT CustomerID,Phone FROM CustomersGer WHERE CustomerID='ALFKI'SELECT CustomerID,Phone FROM CustomersMex WHERE CustomerID='ALFKI'GO--------------------------------------------------------------------- SQL Server 2005里的分区---------------------------------------------------------------------创建实验用数据库USE masterCREATE DATABASE Sales ON PRIMARY (NAME = 'Sales_Data',FILENAME='C:\Databases\Sales_dat.mdf', SIZE=3MB,MAXSIZE=10MB,FILEGROWTH=10%),FILEGROUP FG1(NAME = 'File1',FILENAME = 'C:\Databases\File1_dat.ndf', SIZE = 1MB,MAXSIZE = 10MB,FILEGROWTH = 10%),FILEGROUP FG2(NAME = 'File2',FILENAME = 'C:\Databases\File2_dat.ndf', SIZE = 1MB,MAXSIZE = 10MB,FILEGROWTH = 10%),FILEGROUP FG3(NAME = 'File3',FILENAME = 'C:\Databases\File3_dat.ndf', SIZE = 1MB,MAXSIZE = 10MB,FILEGROWTH = 10%)LOG ON(NAME = 'Sales_Log',FILENAME = 'C:\Databases\Sales_Log.ldf', SIZE = 1MB,MAXSIZE = 10MB,FILEGROWTH = 10%)--创建分区函数,假定当前为2002年USE SalesCREATE PARTITION FUNCTION pf_OrderDate (datetime)AS RANGE RIGHT FOR VALUES('2003/01/01', '2004/01/01')GO--USE Sales--ALTER PARTITION FUNCTION pf_OrderDate ()--SPLIT RANGE ('2005/01/01')--GO--创建分区方案USE SalesGOCREATE PARTITION SCHEME ps_OrderDateAS PARTITION pf_OrderDate TO(FG1, FG2, FG3)GO--创建实验用数据表,并将其绑定到分区方案上USE SalesGOCREATE TABLE dbo.Orders(OrderID int identity(10000,1),OrderDate datetime NOT NULL,CustomerID int NOT NULL,CONSTRAINT PK_Orders PRIMARY KEY (OrderID, OrderDate))ON ps_OrderDate (OrderDate)GOCREATE TABLE dbo.OrdersHistory(OrderID int identity(10000,1),OrderDate datetime NOT NULL,CustomerID int NOT NULL,CONSTRAINT PK_OrdersHistory PRIMARY KEY (OrderID, OrderDate) )ON ps_OrderDate (OrderDate)GO-- SELECT * FROM sys.partition_schemes-- SELECT * FROM sys.partitions--向数据表中写入2002年的范例数据USE SalesGOINSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/6/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/8/13', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/8/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2002/9/23', 1000)GOSELECT * FROM OrdersSELECT * FROM dbo.OrdersHistoryGO--2003年年初利用分区交换执行快速的数据归档USE SalesGOALTER TABLE dbo.Orders SWITCH PARTITION 1 TO dbo.OrdersHistory PARTITION 1 GOSELECT * FROM OrdersSELECT * FROM dbo.OrdersHistoryGO--可以通过以下代码确认数据归档是否成功:--SELECT * FROM dbo.Orders--SELECT * FROM dbo.OrdersHistory--向数据表中写入2003年的范例数据USE SalesGOINSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/6/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/8/13', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/8/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2003/9/23', 1000)GOSELECT * FROM OrdersSELECT * FROM dbo.OrdersHistoryGO--2004年年初利用分区交换执行快速的数据归档USE SalesGOALTER TABLE dbo.Orders SWITCH PARTITION 2 TO dbo.OrdersHistory PARTITION 2 GOSELECT * FROM OrdersSELECT * FROM dbo.OrdersHistoryGO--对2002年数据分区和2003年数据分区进行合并USE SalesGOALTER PARTITION FUNCTION pf_OrderDate() MERGE RANGE ('2003/01/01')GO--SELECT * FROM sys.partition_schemes--SELECT * FROM sys.partitions--使用分区分裂功能准备2005年的数据分区USE SalesGOALTER PARTITION SCHEME ps_OrderDate NEXT USED FG2ALTER PARTITION FUNCTION pf_OrderDate() SPLIT RANGE ('2005/01/01') GO--可使用以下代码检查各分区中的数据行数:SELECT $PARTITION.pf_OrderDate(OrderDate) AS Partition,COUNT(*) AS [COUNT] FROM dbo.OrdersGROUP BY $PARTITION.pf_OrderDate(OrderDate)ORDER BY Partition ;GOSELECT $PARTITION.pf_OrderDate(OrderDate) AS Partition,COUNT(*) AS [COUNT] FROM dbo.OrdersHistoryGROUP BY $PARTITION.pf_OrderDate(OrderDate)ORDER BY Partition ;GO-----------------------USE SalesGOINSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2004/6/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2004/8/13', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2004/8/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2004/9/23', 1000) GOINSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2005/6/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2005/8/13', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2005/8/25', 1000) INSERT INTO dbo.Orders (OrderDate, CustomerID) VALUES ('2005/9/23', 1000) GO。
sql server2005中用语句创建数据库和表
在sql server2005中用语句创建数据库和表:具体示例如下:use mastergoif exists (select * from sysdatabases where name='study')--判断study数据库是否存在,如果是就进行删除drop database studygoexec sp_configure 'show advanced options', 1go-- 更新当前高级选项地配置信息reconfiguregoexec sp_configure 'xp_cmdshell', 1go-- 更新当前功能(xp_cmdshell)地配置信息.reconfiguregoexec xp_cmdshell 'mkdir d:\data', no_output--利用xp_cmdshell 命令创建文件夹,此存储过程地第一个参数为要执行地有效dos命令,第二个参数为是否输出返回信息.gocreate database study--创建数据库on primary(name='study_data',--主数据文件地逻辑名filename='d:\data\study_data.mdf',--主数据文件地物理名size=10mb,--初始大小filegrowth=10% --增长率)log on(name='study_log',--日志文件地逻辑名filename='d:\data\study_data.ldf',--日志文件地物理名size=1mb,maxsize=20mb,--最大大小filegrowth=10%)gouse studygoif exists (select * from sysobjects where name='student')--判断是否存在此表drop table studentgocreate table student(id int identity(1,1) primary key,--id自动编号,并设为主键[name] varchar(20) not null,sex char(2) not null,birthday datetime not null,phone char(11) not null,remark text,tid int not null,age as datediff(yyyy,birthday,getdate())--计算列.)goif exists (select * from sysobjects where name='team')drop table teamgocreate table team(id int identity(1,1) primary key,tname varchar(20) not null,captainid int)goalter table studentaddconstraint ch_sex check(sex in ('男','女')),--检查约束,性别必须是男或女constraint ch_birthday check(birthday between '1950-01-01' and '1988-12-31'), constraint ch_phone check(len(phone)=11),constraint fk_tid foreign key(tid) references team(id),--外键约束,引用team表地主键constraint df_remark default('请在这里填写备注') for remark--默认约束,go更多信息请查看IT技术专栏。
sqlserver 2005 如何创建分区表
注意:分区函数还允许将函数作为分区函数定义的一部分。您可以使用 DATEADD(ms,-3,'20010101'),而不是使用 '20001231 23:59:59.997' 明确定义时间。
要在四个活动分区(每个分区代表一个日历季度)中存储四分之一的 Orders 数据,并创建第五个分区以备将来使用(还是作为占位符,用于在分区表中移入和移出数据),请将 LEFT 分区函数与以下四个边界条件结合使用:
[SubTotal] [money] NULL,
[Status] [tinyint] NOT NULL ,
[RevisionNumber] [tinyint] NULL ,
[ModifiedDate] [datetime] NULL ,
[ShipMethodID] [tinyint] NULL,
创建分区函数后,必须将其与分区架构相关联,以便将分区定向至特定的文件组。定义分区架构时,即使多个分区位于同一个文件组中,也必须为每个分区指定一个文件组。对于前面创建的范围分区 (OrderDateRangePFN),存在五个分区;最后一个空分区将在 PRIMARY 文件组中创建。因为此分区永远不包含数据,所以不需要指定特殊的位置。
边界点 '20010630 23:59:59.997':
第四个分区将包含所有大于 '20010331 23:59:59.997' 但小于或等于 '20010630 23:59:59.997' 的值
最后,第五个分区将包含所有大于 '20010630 23:59:59.997' 的值。
创建分区架构
CREATE PART
MICROSOFT SQL SERVER2005的分区新功能
MICROSOFT SQL SERVER2005的分区新功能摘要:本文介绍了分区在微软数据库sqlserver2005中的实施和应用,尤其是应用在海量数据的数据库上时,可优化文件均衡放置,加快查询速度。
关键词:sql server 2005 表分区索引死锁中图分类号:tp3 文献标识码:a 文章编号:1007-9416(2013)01-0137-01随着数据库使用的深入,我们面临着数据库越来越大的问题。
为了解决这一问题,数据库厂家引入了分区(partitioning)的概念。
oracle从8i开始就引入了初步的范围分区功能,到11g就扩展了interval分区-外键分区、虚拟列分区、引入了分区建议器等扩展功能。
微软从microsoft sql7.0开始通过分区视图实现各种分区方式,到2005版对大型数据库的分区又大大的前进了一步。
通过使用分区,我们能把数据库工作表或索引放置在提前设置的文件组上。
这项新功能可以让表和索引的指定片放置在独立的文件组里,这样能有效的管理比较脆弱工作表的输入和输出。
[u1]改善了这些工作表以及具有各种访问模式的表的可伸缩性和可管理。
尤其表现在数以百gb甚至以tb计算的大型数据库里,单个的工作表也可能非常大,性能严重下降,数据查询反应较慢。
如采取提前设计和分区实现,能大大缓解数据库的查询反应慢、数据死锁、备份时间较长等问题。
由于在sql server management studio(ssms)中没有实施分区的图形界面,只能由我们进行手工写sql语句进行与分区有关的操作。
具体操作步骤如下:1 创建一个分区函数语句如下:creat parition functionpartition_funtction_name(input_parameter_type) as range [left|reght] for values([boundary_value[,,,n]])我们首先要为分区函数提供一个符合对象标识规则的名称,然后说明输入参数的类型。
SQLServer2005实验1-8
SQLServer2005实验实验1 SQL Server 2005 环境P280实验2 创建数据库和表P2831、创建yggl 数据库2、创建Employees(员工),Dept(部门信息),salary(工资),表结构见P283实验3 修改表与表操作P2871、向Employees(员工),Dept(部门信息),salary(工资)插入数据使用T-SQL语句完成下列操作:2、修改表数据(P289)(1) 将编号为000001的职工的收入改为2890(2) 将所有职工的收入增加10%(3) 将“叶凡”的收入增加400元(4) 删除编号为‘210678’的职工信息3、创建Emp1表,表结构:emp1(编号,姓名,电话,部门号),将Employees中的男职工导入到emp1中。
实验4 T-SQL编成P300使用T-SQL语句完成下列操作:1、变量的使用:定义一个变量,用于获取‘102201’员工的电话号码P3002、流程控制语句的使用:判断姓名为王林的员工实际收入是否高于3000,如果是则显示其收入,否则显示‘收入低于3000 P3013、使用系统内置函数完成下列操作(1)求数值-564.5 的绝对值,求数值629对7的模,显示结果。
(2)删除字符串“MICROSOFT SQL SERVER”左边的空格,显示结果。
(3)截取字符串“MICROSOFT”最左边的5个字符,显示结果。
(4)截取姓名“李晓亮”中的第2个汉字,显示结果。
(5)获取当前系统日期和对应的年,月,日。
显示结果。
(6)将字符串‘050624’的类型转换为数值型和日期型,显示结果。
(7)将数值506的类型转换为日期型,显示结果。
实验5 查询1P290使用T-SQL语句完成下列操作:1、查询所有雇员的信息。
2、查询每个雇员的地址和电话。
3、查询“朱俊”雇员的地址和电话。
4、查询Employees表中的部门号和性别。
5、查询月收入高于2000元的员工号码。
SQL Server 2005---分区表和分区函数
SQL Server 2005------分区表和分区函数在谈论分区表这个话题之前,先和大家分享一个案例:2008年秋天的某天,我的团队接到成都市XX局一个SQL调优的ESS单子。
客户反映查询统计一次各地市局上报的数据汇总,需要6到15秒才能获得真正想要的数据,当我和销售人员赶到客户数据中心现场后,发现里面布置了很多柜式服务器,每台服务器都是8核16G内存。
和相关技术负责人沟通以及演示业务系统之后,可以肯定不是服务器性能的问题,我详细分析了他们的数据库,统计慢的几张表往往一周的上报数据便会增加1百多万行,导致他们这个系统刚上线没多久,某些表产生的数据已经在2000万行以上,最终我提出了优化方案,业务逻辑层采用存储过程代替普通的SQL语句,并启用相关开发平台的缓存技术;数据库系统中采用增强索引和规划分区表进行优化,最终问题解决。
事实上数据库性能优化是每个优秀的数据库工程师必须具备的素质之一,而这一节讨论的分区表便是性能调优的一种技术。
在企业级应用系统中,一个表存储2千万行的数据很常见,不可预期的数据也会在逐渐增长,所以数千万级别的表DBA会常常碰到,而TB级别的数据最终也在所难免,因此了解和掌握性能调优的18般兵器非常重要。
我计划用三篇博文介绍分区表这个主题,分别为:1,分区表理论解析2,实战分区表3,分区表前传大凡在应用系统和数据库系统中行走江湖多年的朋友,都会面临数据统计、分析以及归档的问题,企业信息化进程加速了各种数据的极具增长,商务智能(BI)的出现和实施着实给信息工作者和决策者带来了绝妙的体验,但从 OLTP 向 OLAP 系统加载数据是很头疼的事,常常需要数分钟或数小时,解决这一问题的技术之一便是分区表,一旦实施了分区表,这样的操作往往只需几秒钟,太让人兴奋了。
而大型表或索引经过分区后更容易进行管理,因为这样可以快速高效地管理和访问数据子集,同时维护数据集合的完整性。
分区表的数据分布于一个数据库中的多个文件组单元中,数据是按水平方式分区的(数据分区的多种方式会在分区表前传中阐述),因此一个表的某些行映射到某个分区,而另外一些行映射到另外某个分区,以此类推。
SQL2005分区表
SQL2005分区表分区表有利于管理海量数据的表和索引,在分区中引入了一个分区键的概念,分区键用于根据某个区间值,特定值列表或散列函数执行数据的聚集.使用分区表有如下好处:1.提高数据的高用性:可用性的提高源自每个分区的独立性.优化器知道这种分区机制,会相应的从查询计划中除去未引用的分区.2.减轻管理员负担.3.改善某些查询性能,在只读查询的性能方面,分区对两类操作起作用.●分区消除:处理查询时,不考虑某些分区.●并行操作:并行全表扫描和并行索引区间扫描.4.减少资源竞争.脚本:--首先手工创建文件分组、物理文件;脚本方式创建后边介绍---- 创建分区函数--go--create partition function MineDateRange(datetime)--as--range right(left) for values (--'2010-01-01',--'2011-01-01',--'2012-01-01')--go------ 创建分区方案--go--create partition scheme Mine_Orders--as--partition MineDateRange--to (test2010, test2011, test2012,test2013)--go-- 创建分区表--go--create table dbo.OrdersTest--(-- OrderID int not null-- ,CustomerID varchar(10) not null-- ,EmployeeID int not null-- ,OrderDate datetime not null--)--on Mine_Orders(OrderDate)--go-- 创建聚集分区索引--create clustered index IXC_OrdersTest on dbo.OrdersTest(OrderDate) --go--插入数据--INSERT INTO [HyMineSecurityMonitor].[dbo].[OrdersTest]-- ([OrderID]-- ,[CustomerID]-- ,[EmployeeID]-- ,[OrderDate])-- VALUES-- (7-- ,'ffff',7-- ,'2015-10-10 12:20:23')--查询数据--select * from OrdersTest--查看每个分区的数据分布情况--SELECT partition = $partition .MineDateRange(OrderDate), rows = count(*), minval = min(OrderDate), maxval = max(OrderDate)--FROM dbo.OrdersTest--GROUP BY $partition .MineDateRange(OrderDate)--ORDER BY partition--------------------------------------------修改分区------------------------------------------------------添加文件分组--ALTER DATABASE HyMineSecurityMonitor ADD FILEGROUP [test2014]--添加物理文件--ALTER DATABASE HyMineSecurityMonitor--ADD FILE--(NAME = N'test2014',FILENAME =N'D:\DataBase\testDB\test2014.ndf',SIZE = 5MB,MAXSIZE =100MB,FILEGROWTH = 5MB)--TO FILEGROUP [test2014]--修改分区函数新增一个分区--go--alter partition function MineDateRange()--split range('2013-01-01')--go--修改分区方案新增一个文件--go--alter partition scheme Mine_Orders next used [test2014]--go--修改分区函数合并一个分区--go--alter partition function PF_Orders_OrderDateRange()--merge range('2013-01-01')--go--------------------------------------------------------分区表数据迁移---------------------------------------------SQL Server 2005 分区表分区切换的三种形式:----1. 切换分区表的一个分区到普通数据表中:Partition to Table;(普通表:dbo.Orders_1998)-- create table dbo.Orders_1998-- (-- OrderID int not null-- ,CustomerID varchar(10) not null-- ,EmployeeID int not null-- ,OrderDate datetime not null-- ) on [test2012]---- alter table dbo.OrdersTest switch partition 3 to dbo.Orders_1998--1). 普通表必须建立在分区表切换分区所在的文件组上。
实验五:创建分区表
实验实验五五:创建分区表一 实验实验内容内容1.1.创建分区表创建分区表创建分区表简介本实验中,将联系如何创建分区函数、分区方案和分区表。
准备确保虚拟机器正在运行,并且您作为 Student 登录。
创建分区函数要创建分区函数,请执行以下步骤:1. 单击“开始”,指向“所有程序”,指向“Microsoft SQL Server 2005”,然后单击“SQL Server Management Studio ”。
2. 在“连接到服务器”对话框中,指定下表中的值,然后单击“连接”。
属性值 服务器类型数据库引擎 服务器名称MIAMI 身份验证 Windows 身份验证3. 在“文件”菜单上,指向“打开”,单击“文件”,然后打开 E:\Democode 文件夹中的 Partitions.sql 文件。
出现提示时使用 Windows 身份验证连接到 MIAMI 。
4. 选择注释“Create partition function ”下的代码,然后单击“执行”按钮。
这段代码创建名为 pf_OrderDate 并带有三个分区的分区函数:一个针对 2004 年之前的日期,一个针对 2004 年 1 月到 12 月月底之间的日期,还有一个针对 2005 年 1 月以后的日期。
创建分区方案要创建分区方案,请执行以下步骤:1. 选择注释“Add filegroups and create partition scheme ”下面的代码。
这段代码:a) 文件组添加到 AdventureWorks 数据库。
b) 将文件添加到 AdventureWorks 数据库中的新文件组。
c) 创建名为 ps_OrderDate 的分区方案,该分区方案将 pf_OrderDate 分区函数中的分区映射到 新的文件组。
2. 单击“执行”按钮。
请注意,该分区方案已经创建,并且 fg4 标记为要使用的下一个文件组。
创建分区表要创建分区表,请执行以下步骤:1. 选择注释“Create partitioned table ”下的代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建sql server 2005 分区表实例
sql server 2005 提供了分区表,这使得我们在处理超大容量数据库性能方面有了新的选择,通过建立分区表,可以把数据存储在不同的物理硬盘上,在多cpu及多硬盘的服务器上,有效的利用了i/o并行处理,使得不至于存取数据时卡死在某一个物理硬盘上。
建立分区表,主要有三个步骤:
1、创建分区函数以指定如何分区使用该函数的表或索引。
2、创建分区方案以指定分区函数的分区在文件组上的位置。
3、创建使用分区方案的表或索引。
现在以一个实例,来说明分区别的建立方法:有一个表,主键是id int型,数据量为100W(模拟为这么多,实际上过500W或数据量不大但表压力巨大时用分区表才更有意义)现在把该表划分在不同的硬盘上,以提高i/o的并行处理能力,提升性能,本例每隔30W划分为一个区。
一、准备工作
--建数据库
Create DATABASE Tmp_Db
ON
(NAME= Tmp_Db_dat,
FILENAME='D:\Data\Tmp_Db.mdf',
SIZE= 10,
MAXSIZE= 50,
FILEGROWTH= 5 )
LOG ON
(NAME= Tmp_Db_log,
FILENAME='D:\Data\Tmp_Db.ldf',
SIZE= 5MB,
MAXSIZE= 25MB,
FILEGROWTH= 5MB )
GO
USE Tmp_Db
GO
--增加文件组这里我们暂增加个
Alter DATABASE Tmp_Db ADD FILEGROUP [FILEGROUP_1]
Alter DATABASE Tmp_Db ADD FILEGROUP [FILEGROUP_2]
Alter DATABASE Tmp_Db ADD FILEGROUP [FILEGROUP_3]
Alter DATABASE Tmp_Db ADD FILEGROUP [FILEGROUP_4]
--将文件分配到分件组,并且打散在不同的硬盘上,以提高i/o并行处理能力
Alter DATABASE Tmp_Db
ADD FILE(NAME= N'Tmp_Db_FILEGROUP_1',FILENAME= N'E:\Data\Tmp_Db_FILEGROUP_1.ndf',SIZE= 3072KB ,FILEGROWTH= 1024KB )
TO FILEGROUP [FILEGROUP_1]
Alter DATABASE Tmp_Db
ADD FILE(NAME= N'Tmp_Db_FILEGROUP_2',FILENAME= N'F:\Data\Tmp_Db_FILEGROUP_2.ndf',SIZE= 3072KB ,FILEGROWTH= 1024KB )
TO FILEGROUP [FILEGROUP_2]
Alter DATABASE Tmp_Db
ADD FILE(NAME= N'Tmp_Db_FILEGROUP_3',FILENAME= N'G:\Data\Tmp_Db_FILEGROUP_3.ndf',SIZE= 3072KB ,FILEGROWTH= 1024KB )
TO FILEGROUP [FILEGROUP_3]
Alter DATABASE Tmp_Db
ADD FILE(NAME= N'Tmp_Db_FILEGROUP_4',FILENAME= N'H:\Data\Tmp_Db_FILEGROUP_4.ndf',SIZE= 3072KB ,FILEGROWTH= 1024KB )
TO FILEGROUP [FILEGROUP_4]
二、创建分区函数及分区方案(架构)--此步骤为核心部分
1.--创建分区函数,这里我们是以我们实例的一个表的int型ID的值的范围来分为四个区;
Create PARTITION FUNCTION PT_FN_TEST(INT)
AS RANGE LEFT FOR VALUES(300000,600000,900000)
2.--创建分区方案,将分区函数所分四个区对应(关联)到四个文件组;
Create PARTITION SCHEME SH_TEST AS PARTITION PT_FN_TEST TO
(FILEGROUP_1,FILEGROUP_2,FILEGROUP_3,FILEGROUP_4)
3.--创建分区表,通过分区键值ID和分区方案SH_TEST结合。
Create TABLE T_TEST
(ID INT IDENTITY(1,1)PRIMARY KEY,CLASS_A VARCHAR(50),CLASS_B VARCHAR(50),ADD_DT DATETIME)ON SH_TEST(ID)
三、为表插入数据,查看结果
--这里我们插入100W数据
DECLARE @I INT
Select @I = 1
WHILE @I <= 1000000
BEGIN
Insert INTO T_TEST(CLASS_A,CLASS_B,ADD_DT)
Select CASE @I%2 WHEN 0 THEN'CLASS_A'+CAST(@I AS VARCHAR)ELSE CAST(@I AS VARCHAR)END,
CASE @I%5 WHEN 0 THEN'CLASS_B'+CAST(@I AS VARCHAR)ELSE CAST(@I AS VARCHAR)END,GETD ATE()
Select @I = @I + 1
END
--查看分区信息
Select$partition.PT_FN_TEST(ID)AS PARTITION_NUMBER_ID,MIN(ID)AS MIN_ID,MAX(ID)AS MAX_ID ,count(*)AS PARTITION_CNT
FROM TMP_DB.dbo.T_TEST
GROUP BY$partition.PT_FN_TEST(ID)
ORDER BY PARTITION_NUMBER_ID
--结果
以次为:分区ID,当前分区最小ID,当前分区最大ID,当前分区数据行总数
1 1 300000 300000
2 300001 600000 300000
3 600001 900000 300000
4 900001 1000000 100000
可以看到,有T_TEST以被分到四个分区,也即被存储在Tmp_Db_FILEGROUP_1.ndf、Tmp_Db_FILEGROUP_2.ndf、Tmp_Db_FILEGROUP_3.ndf、Tmp_Db_FILEGROUP_4.ndf四个物理文件上,分存在四个物理硬盘。
到此,分区表建立完成。
最后说明一下,分区表是将一个表分配到不同的物理硬盘上,利用多个i/o的并行处理,来提高数据处理能力,如果你只
有一个硬盘,假如做了分区表,性能只能变得更差,切记。