SQL Server 2005中的分区表
- 格式:docx
- 大小:1.86 MB
- 文档页数:24
SQL Server 2005数据类型说明用varchar(max)代替text。
varchar的最大长度为8000,但是varchar(max)则可以存储多达2G的数据,因此其作用相当于SQL 2000中的text。
但是微软可能会后续的SQL Server版本中移除text类型,从现在就应该用varchar(max) 来代替text。
用nvarchar(max)代替ntext,用binary(max)代替image.(Image类型对应C#的byte[])为XML数据选择xml类型。
在SQL Server 2005中,为XML数据添加了相应的数据类型,因此存储XML数据的列不需要用 varchar(max)或nvarchar(max),而应当用xml数据类型,以利用T-SQL中专门针对xml数据列的新命令,以及针对xml列的索引。
易混淆的数据类型 (C#:string)(1)char、varchar、text和nchar、nvarchar、ntextchar和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。
text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
后面三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。
写过程序的朋友对Unicode应该很了解。
字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
SQL Server Express 2005 是微软推出的免费版数据库管理系统。
它是 Microsoft SQL Server 2005 的一个版本,专门为小型应用程序和开发人员提供支持。
SQL Server Express 2005 包含了一个轻量级的数据库引擎和一些基本的管理工具,虽然不像其它版本那么强大,但是对于小型项目和个人开发者来说,是一个理想的选择。
1. SQL Server Express 2005 的特点SQL Server Express 2005 具有以下特点:1) 免费:与其它商业版本的 SQL Server 相比,Express 版本是免费提供的。
这使得它成为了许多小型项目和个人开发者的首选。
2) 轻量级:SQL Server Express 2005 拥有小巧的安装包,对系统资源的需求较低,适合安装在个人电脑或者小型服务器上使用。
3) 适用范围广泛:虽然功能较其它版本有所限制,但对于小型应用程序、全球信息站和开发测试来说,SQL Server Express 2005 足够满足需求。
4) 简单易用:虽然功能较完整版本有所缺失,但对于普通用户而言,SQL Server Express 2005 仍然提供了简单易用的数据库管理工具,满足日常需求。
2. SQL Server Express 2005 的限制尽管 SQL Server Express 2005 具有许多优点,但也存在一些限制:1) 数据库大小限制:每个数据库的大小受到限制,对于大型项目而言,可能无法满足需求。
2) CPU 限制:SQL Server Express 2005 受到处理器数量的限制,这意味着在多核处理器的系统上性能受到限制。
3) 内存限制:对于内存的使用也存在限制,这可能影响到一些需要大量内存处理的应用程序。
4) 功能限制:SQL Server Express 2005 不支持某些高级功能,比如分区表和透明数据加密等。
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个表,每个小表表示特定年份内一个月的数据。
任何需要特定月份数据的查询只需引用相应月份的表。
而垂直分区则是将原始表分成多个只包含较少列的表。
SQL Server 2005 配置说明一、安装SQL Server 2005数据库目前,64位系统上安装的SQL Server 2005数据库,都是由Microsoft Visual Studio 2008安装的Express版本。
安装过程如下:1.先安装虚拟光驱daemo-x64.exe,安装过程中,会提示重新启动,重新启动完成后,就会安装虚拟光驱完成。
这时,会在屏幕右下角出现红色闪电图标。
左键点击图标,选择安装VS 2008的虚拟镜像文件zmvspro8.iso。
如图:使用虚拟光驱选择安装VS2008的虚拟光驱镜像文件2.安装VS2008,在选择好VS2008镜像文件后。
打开我的电脑,选择”DVD 驱动器(G:)”盘(可能根据不同的电脑,虚拟光驱的名字不一样),进入后,选择Autorun.exe执行安装VS2008。
根据安装提示一步一步安装完成,这样数据库就可以安装完成了。
注意,在选择安装时,选择完全安装(FULL),以防环境不一样,导致数据库运行出现问题。
如图红色区域:选择完全安装即FULL安装3.安装数据库管理工具SQL Server 2005 Management studio。
由于是从VS2008中安装的数据库,所以安装完成的数据库中是没有数据库管理工具,我们要自己安装个数据库管理工具。
安装管理工具的软件从相关人员索要。
执行“SQLServer2005_SSMSEE_x64.msi”,根据安装提示一步步就可以安装成功,安装成功后,可以查看管理数据库。
如图所示:成功安装SQL Server 2005和数据库管理工具,红色为管理工具4.查看数据库。
在使用数据库前,先要确认数据库服务正常启动。
点击《开始》->《程序》->《Microsoft SQL Server 2005》->《Configuration Tools》->《SQL Server Configuration Manager》后,会出现数据库配置管理对话框,点击左边树状图中“SQL Server 2005 Services”,在右边查看“SQL Server(SQLEXPRESS)”的图标,是否有个绿色的小箭头,如果有则说明数据库服务正常运行。
SQL Server 分区视图2011-05-17 20:58SQL Server 分区视图在数据库中,对于一些长年累月不断递增的表,难免会发生执行速度越来越慢的问题。
做分区表,是一种解决办法。
“:>>>>>>假如条件不允许做分区表的话,例如:当你创建一个分区函数的时候,系统提示你:只能在 SQL Server Enterprise Edition 中创建分区函数。
只有 SQL Server Enterprise Edition 支持分区。
那么分区表,是没法用了,只能想别的办法了。
情况一或者是数据库里面的一张大表,已经按时间,拆分为多个小表了。
但是客户要求软件里面,查询数据,要和没拆分之前一样。
例如:原先的 sale_data 包含 2008年--今天的数据。
现在的 sale_data 被拆分为 sale_data_2008,sale_data_2009,sale_data_2010,sale_data(这个仅保存2011年数据)也就是假如客户要查询 2009年12月-2010年1月的报表。
不好意思,你要自己判断了。
先判断时间 2009年12月,然后去检索 sale_data_2009 表的部分数据接着再判断时间 2010年1月,然后去检索 sale_data_2010 表的部分数据.情况二或者是数据库本身就被设计成多张小表。
例如:有个仓库字典表记录着仓库的名字,仓库的表名。
表里面的数据可能是大仓库1 tab_big1大仓库2 tab_big2小仓库1 tab_small小仓库2 tab_small小仓库3 tab_small有很多个仓库表(表名就是仓库字典表中所定义的),记录着当前仓库存储着什么物品。
当你要查询某个仓库的库存报表的时候。
不好意思,你要先去仓库字典表,先查询出这个仓库名字所对应的数据库表名称叫啥。
然后再 SELECT * FROM 表名。
如果你要查询,现在这个时候,某样物品,都在哪些仓库有,各有多少个,那就更悲惨了。
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如何创建分区表⼀、分区表的定义:⼀般情况下,我们建⽴数据库表时,表数据都存放在⼀个⽂件⾥。
但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的⽂件⾥,把⼀个⼤的数据⽂件拆分为多个⼩⽂件,还可以把这些⼩⽂件放在不同的磁盘下由多个cpu进⾏处理。
这样⽂件的⼤⼩随着拆分⽽减⼩,还得到硬件系统的加强,⾃然对我们操作数据是⼤⼤有利的。
所以⼤数据量的数据表,对分区的需要还是必要的,因为它可以提⾼select效率,还可以对历史数据强⾏区分存档,对于多渠道导⼊数据时不容易锁表。
⼆、创建分区表的步骤:1、创建数据库⽂件组2、创建数据库⽂件3、创建分区函数4、创建分区⽅案5、创建分区表三、举例说明:还是拿出实际的例⼦来说明如何创建分区表吧。
⼩公主,⾛起!3.1、先创建⼀个新的数据库mysqlDB,创建数据库⽂件组和⽂件,添加⽂件组。
3.2 创建数据⽂件,并为数据⽂件分配⽂件组。
完成创建后的数据库⽂件信息创建数据库⽂件组和⽂件,添加⽂件组,并为数据⽂件分配⽂件组--SQL脚本如下:alter database mysqlDB add filegroup server2015alter database mysqlDB add filegroup server2016alter database mysqlDB add filegroup server2017alter database mysqlDB add filegroup server2018alter database mysqlDB add filegroup server2019ALTER DATABASE [mysqlDB] ADD FILE(NAME=N'mysqlDB_2015',FILENAME=N'D:\DATEBASE\mysqlDB_2015.ndf',SIZE=3MB, MAXSIZE=UNLIMITED,FILEGROWTH=5MB)TO FILEGROUP SERVER2015 --⽂件组ALTER DATABASE [mysqlDB] ADD FILE(NAME=N'mysqlDB_2016',FILENAME=N'D:\DATEBASE\mysqlDB_2016.ndf',SIZE=3MB, MAXSIZE=UNLIMITED,FILEGROWTH=5MB)TO FILEGROUP SERVER2016ALTER DATABASE [mysqlDB] ADD FILE(NAME=N'mysqlDB_2017',FILENAME=N'D:\DATEBASE\mysqlDB_2017.ndf',SIZE=3MB, MAXSIZE=UNLIMITED,FILEGROWTH=5MB)TO FILEGROUP SERVER2017ALTER DATABASE [mysqlDB] ADD FILE(NAME=N'mysqlDB_2018',FILENAME=N'D:\DATEBASE\mysqlDB_2018.ndf',SIZE=3MB, MAXSIZE=UNLIMITED,FILEGROWTH=5MB)TO FILEGROUP SERVER2018ALTER DATABASE [mysqlDB] ADD FILE(NAME=N'mysqlDB_2019',FILENAME=N'D:\DATEBASE\mysqlDB_2019.ndf',SIZE=3MB, MAXSIZE=UNLIMITED,FILEGROWTH=5MB)TO FILEGROUP SERVER2019查看数据库⽂件组SQL语句:select * from sys.filegroups3.3 创建分区函数步骤如下:116创建分区函数Transact-SQL语法:CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )AS RANGE [ LEFT | RIGHT ]FOR VALUES ( [ boundary_value [ ,...n ] ] ) [ ; ]参数: partition_function_name:分区函数的名称。
MS SQL 2005 四个排序函数ROW_NUMBER、RANK、DENSE_RANK 和 NTILE 简介用法/结果排名排序2010-11-01 10:30在SQL 2005中存在四种排名函数: ROW_NUMBER、RANK、DENSE_RANK 和 NTILE。
这些新函数可以有效地分析数据以及向查询的结果行提供排序值。
您可能发现这些新函数有用的典型方案包括:将连续整数分配给结果行,以便进行表示、分页、计分和绘制直方图。
下面通过具体的方案将用来讨论和演示不同的函数和它们的子句。
十一位演讲者在会议中发表演讲,并且为他们的讲话获得范围为 1 到 9 的分数。
结果被总结并存储在下面的 SpeakerStats 表中:CodeCREATE TABLE SpeakerStats(speaker VARCHAR(10) NOT NULL PRIMARY KEY, track VARCHAR(10) NOT NULL, score INT NOT NULL, pctfilledevals INT NOT NULL, numsessions INT NOT NULL)SET NOCOUNT ONINSERT INTO SpeakerStats VALUES(‗Dan‘, ‗Sys‘, 3, 22, 4)INSERT INTO SpeakerStats VALUES(‗Ron‘, ‗Dev‘, 9, 30, 3)INSERT INTO SpeakerStats VALUES(‗Kathy‘, ‗Sys‘, 8, 27, 2)INSERT INTO SpeakerStats VALUES(‗Suzanne‘, ‗DB‘, 9, 30, 3)INSERT INTO Spe akerStats VALUES(‗Joe‘, ‗Dev‘, 6, 20, 2)INSERT INTO SpeakerStats VALUES(‗Robert‘, ‗Dev‘, 6, 28, 2)INSERT INTO SpeakerStats VALUES(‗Mike‘, ‗DB‘, 8, 20, 3)INSERT INTO SpeakerStats VALUES(‗Michele‘, ‗Sys‘, 8, 31, 4)INSERT INTO SpeakerStats VALUES(‗Jessica‘, ‗Dev‘, 9, 19, 1)INSERT INTO SpeakerStats VALUES(‗Brian‘, ‗Sys‘, 7, 22, 3)INSERT INTO SpeakerStats VALUES(‗Kevin‘, ‗DB‘, 7, 25, 4)每个演讲者都在该表中具有一个行,其中含有该演讲者的名字、议题、平均得分、填写评价的与会者相对于参加会议的与会者数量的百分比以及该演讲者发表演讲的次数。
配置SQL Server 2005服务器服务与服务器是两个不同的概念,服务器是提供服务的计算机,配置服务器主要是对内存、处理器、安全性等几个方面配置。
由于SQL Server 2005服务器的设置参数比较多,这里选一些比较常用的介绍。
配置SQL Server 2005服务器的办法:启动【SQL Server Management Studio】,在【对象资源管理器】窗口里,右击要配置的服务器(实例)名,在弹出的快捷菜单里选【属性】选项。
下面介绍各选项卡里的内容。
4.5.1 常规服务器属性的【常规】选项卡,此处功能是查看服务器的属性,例如服务器名、操作系统、CPU数等等。
此处各项只能查看,不能修改。
选项卡里有以下项目:l 名称:显示服务器(实例)的名称。
l 产品:显示当前运行的SQL Server的版本。
l 操作系统:显示当前运行的操作系统及版本号。
l 平台:显示运行SQL Server的操作系统和硬件。
l 版本:显示当前运行的SQL Server版本号l 语言:显示当前的SQL Server实例所使用的语言。
l 内存:显示当前服务器上安装的内存大小。
l 处理器:显示当前服务器上安装的CPU数量。
l 根目录:显示当前SQL Server实例所在的目录。
l 服务器排序规则:显示当前服务服务器采用的排序规则。
l 已群集化:显示是否安装了SQL Server 2005服务器群集。
4.5.2 内存服务器属性的【内存】选项卡,选项卡里有以下项目:l 使用AWE分配内存:32位的操作系统最多只能支持到4GB的内存,然而大型的SQL Server 2005服务器的物理内存可以扩展到64GB。
如果要使用大于4GB的内存,就要用到Windows 2000和Windows Server 2003地址对话框化扩展插件(AWE)API来识别和分配了。
这个选项是指定SQL Server利用AWE来支持超过4GB以上的物理内存。
(一):什么是分区表?为什么要用分区表?如何创建分区表?如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。
1、数据库中某个表中的数据很多。
很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。
当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了。
如果非要我说一个数值的话,我认为是100万条。
2、但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但是这一千万条记录都是常用的记录,那么最好也不要使用分区表,说不定会得不偿失。
只有你的数据是分段的数据,那么才要考虑到是否需要使用分区表。
3、什么叫数据是分段的?这个说法虽然很不专业,但很好理解。
比如说,你的数据是以年为分隔的,对于今年的数据而言,你常进行的操作是添加、修改、删除和查询,而对于往年的数据而言,你几乎不需要操作,或者你的操作往往只限于查询,那么恭喜你,你可以使用分区表。
换名话说,你对数据的操作往往只涉及到一部分数据而不是所有数据的话,那么你就可以考虑什么分区表了。
那么,什么是分区表呢?简单一点说,分区表就是将一个大表分成若干个小表。
假设,你有一个销售记录表,记录着每个每个商场的销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧。
2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表。
那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少。
但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度。
以添加记录为例,以上5个表是独立的5个表,在不同时间添加记录的时候,程序员要使用不同的SQL 语句,例如在2011年添加记录时,程序员要将记录添加到2011年那个表里;在2012年添加记录时,程序员要将记录添加到2012年的那个表里。
这样,程序员的工作量会增加,出错的可能性也会增加。
使用分区表就可以很好的解决以上问题。
分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表。
接着上面的例子,分区表可以将一个销售记录表分成五个物理上的小表,但是对于程序员而言,他所面对的依然是一个大表,无论是2010年添加记录还是2012年添加记录,对于程序员而言是不需要考虑的,他只要将记录插入到销售记录表——这个逻辑中的大表里就行了。
SQL Server会自动地将它放在它应该呆在的那个物理上的小表里。
同样,对于查询而言,程序员也只需要设置好查询条件,OK,SQL Server会自动将去相应的表里查询,不用管太多事了。
这一切是不是很诱人?的确,那么我们就可以开始动手创建分区表了。
第一、创建分区表的第一步,先创建数据库文件组,但这一步可以省略,因为你可以直接使用PRIMARY文件。
但我个人认为,为了方便管理,还是可以先创建几个文件组,这样可以将不同的小表放在不同的文件组里,既便于理解又可以提高运行速度。
创建文件组的方法很简单,打开SQL Server Management Studio,找到分区表所在数据库,右键单击,在弹出的菜单里选择“属性”。
然后选择“文件组”选项,再单击下面的“添加”按钮,如下图所示:第二,创建了文件组之后,还要再创建几个数据库文件。
为什么要创建数据库文件,这很好理解,因为分区的小表必须要放在硬盘上,而放在硬盘上的什么地方呢?当然是文件里啦。
再说了,文件组中没有文件,文件组还要来有啥用呢?还是在上图的那个界面,选择“文件”选项,然后添加几个文件。
在添加文件的时候要注意以下几点:1、不要忘记将不同的文件放在文件组中。
当然一个文件组中也可以包含多个不同的文件。
2、如果可以的话,将不同的文件放在不同的硬盘分区里,最好是放在不同的独立硬盘里。
要知道IQ的速度往往是影响SQL Server运行速度的重要条件之一。
将不同的文件放在不同的硬盘上,可以加快SQL Server的运行速度。
在本例中,为了方便起见,将所有数据库文件都放在了同一个硬盘下,并且每个文件组中只有一个文件。
如下图所示。
第三、创建一个分区函数。
这一步是必须的了,创建分区函数的目的是告诉SQL Server 以什么方式对分区表进行分区。
这一步必须要什么SQL脚本来完成。
以上面的例子,我们要将销售表按时间分成5个小表。
假设划分的时间为:第1个小表:2010-1-1以前的数据(不包含2010-1-1)。
第2个小表:2010-1-1(包含2010-1-1)到2010-12-31之间的数据。
第3个小表:2011-1-1(包含2011-1-1)到2011-12-31之间的数据。
第4个小表:2012-1-1(包含2012-1-1)到2012-12-31之间的数据。
第5个小表:2013-1-1(包含2013-1-1)之后的数据。
那么分区函数的代码如下所示:1.CREATE PARTITION FUNCTION partfunSale (datetime)2.AS RANGE RIGHT FOR VALUES ('20100101','20110101','20120101','20130101')其中:1、CREATE PARTITION FUNCTION意思是创建一个分区函数。
2、partfunSale为分区函数名称。
3、AS RANGE RIGHT为设置分区范围的方式为Right,也就是右置方式。
4、FOR VALUES ('20100101','20110101','20120101','20130101')为按这几个值来分区。
这里需要说明的一下,在Values中,'20100101'、'20110101'、'20120101'、'20130101',这些都是分区的条件。
“20100101”代表2010年1月1日,在小于这个值的记录,都会分成一个小表中,如表1;而小于或等于'20100101'并且小于'20110101'的值,会放在另一个表中,如表2。
以此类推,到最后,所有大小或等于'20130101'的值会放在另一个表中,如表5。
也许有人会问,为什么值“20100101”会放在表2中,而不是表1中呢?这是由AS RANGE RIGHT中的RIGHT所决定的,RIGHT的意思是将等于这个值的数据放在右边的那个表里,也就是表2中。
如果您的SQL语句中使用的是Left而不是RIGHT,那么就会放在左边的表中,也就是表1中。
第四、创建一个分区方案。
分区方案的作用是将分区函数生成的分区映射到文件组中去。
分区函数的作用是告诉SQL Server,如何将数据进行分区,而分区方案的作用则是告诉SQL Server将已分区的数据放在哪个文件组中。
分区方案的代码如下所示:1.CREATE PARTITION SCHEME partschSale2.AS PARTITION partfunSale3.TO (4. Sale2009,5. Sale2010,6. Sale2011,7. Sale2012,8. Sale2013)其中:1、CREATE PARTITION SCHEME意思是创建一个分区方案。
2、partschSale为分区方案名称。
3、AS PARTITION partfunSale说明该分区方案所使用的数据划分条件(也就是所使用的分区函数)为partfunSale。
4、TO后面的内容是指partfunSale分区函数划分出来的数据对应存放的文件组。
到此为止,分区函数和分区方案就创建完毕了。
创建后的分区函数和分区方案在数据库的“存储”中可以看到,如下图所示:最后,创建分区表,创建方式和创建普遍表类似,如下所示:1.CREATE TABLE Sale(2. [Id] [int] IDENTITY(1,1) NOT NULL,3. [Name] [varchar](16) NOT NULL,4. [SaleTime][datetime] NOT NULL5.) ON partschSale([SaleTime])其中:1、CREATE TABLE 意思是创建一个数据表。
2、Sale为数据表名。
3、()中为表中的字段,这里的内容和创建普通数据表没有什么区别,惟一需要注意的是不能再创建聚集索引了。
道理很简单,聚集索引可以将记录在物理上顺序存储的,而分区表是将数据分别存储在不同的表中,这两个概念是冲突的,所以,在创建分区表的时候就不能再创建聚集索引了。
4、ON partschSale()说明使用名为partschSale的分区方案。
5、partschSale()括号中为用于分区条件的字段是SaleTime。
OK,一个物理上是分离的,逻辑上是一体的分区表就创建完毕了。
查看该表的属性,可以看到该表已经属于分区表了。
(二):如何添加、查询、修改分区表中的数据在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这些数据放在哪个物理上的数据表中。
接上篇文章,我们在创建好的分区表中插入几条数据:1.</mce:script><mce:script type="text/javascript" src="http://hi.images./js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http:///js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>"50"rows="15"name="code" class="c-sharp">insert Sale ([Name],[SaleTime]) values ('张三','2009-1-1')2.insert Sale ([Name],[SaleTime]) values ('李四','2009-2-1')3.insert Sale ([Name],[SaleTime]) values ('王五','2009-3-1')4.insert Sale ([Name],[SaleTime]) values ('钱六','2010-4-1')5.insert Sale ([Name],[SaleTime]) values ('赵七','2010-5-1')6.insert Sale ([Name],[SaleTime]) values ('张三','2011-6-1')7.insert Sale ([Name],[SaleTime]) values ('李四','2011-7-1')8.insert Sale ([Name],[SaleTime]) values ('王五','2011-8-1')9.insert Sale ([Name],[SaleTime]) values ('钱六','2012-9-1')10.insert Sale ([Name],[SaleTime]) values ('赵七','2012-10-1')11.insert Sale ([Name],[SaleTime]) values ('张三','2012-11-1')12.insert Sale ([Name],[SaleTime]) values ('李四','2013-12-1')13.insert Sale ([Name],[SaleTime]) values ('王五','2014-12-1')从以上代码中可以看出,我们一共在数据表中插入了13条数据,其中第1至3条数据是插入到第1个物理分区表中的;第4、5条数据是插入到第2个物理分区表中的;第6至8条数据是插入到第3个物理分区表中的;第9至11条数据是插入到第4个物理分区表中的;第12、13条数据是插入到第5个物理分区表中的。