当前位置:首页 » 编程语言 » sqlserver2008分区表

sqlserver2008分区表

发布时间: 2024-11-28 13:41:58

A. sqlserver中分表和分库有什么区别

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

1. 分区表简介
使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。

 大型表:数据量巨大的表。
 访问模式:因目的不同,需访问的不同的数据行集,每种目的的访问可以称之为一种访问模式。

分区一方面可以将数据分为更小、更易管理的部分,为提高性能起到一定的作用;另一方面,对于如果具有多个CPU的系统,分区可以是对表的操作通过并行的方式进行,这对于提升性能是非常有帮助的。

注意:只能在 SQL Server Enterprise Edition 中创建分区函数。只有 SQL Server Enterprise Edition 支持分区。
2. 创建分区表或分区索引的步骤
可以分为以下步骤:
1. 确定分区列和分区数
2. 确定是否使用多个文件组
3. 创建分区函数
4. 创建分区架构(Schema)
5. 创建分区表
6. 创建分区索引

下面详细描述的创建分区表、分区索引的步骤。
2.1. 确定分区列和分区数
在开始做分区操作之前,首先要确定待分区表的访问模式,该模式决定了什么列适合做分区键。例如,对于销售数据,一般会先根据日期把数据范围限定在一个范围内,然后在这个基础上做进一步的查询,这样,就可以把日期作为分区列。

确定了分区列之后,需要进一步确定分区数,亦即分区表中需要包含多少数据,每个分区的数据应该限定在哪个范围。

2.2. 确定是否使用多个文件组
为了有助于优化性能和维护,应该使用文件组分离数据。一般情况下,如果经常对分区的整个数据集操作,则文件组数最好与分区数相同,并且这些文件组通常应该位于不同的磁盘上,再配合多个CPU,则SQL Server 可以并行处理多个分区,从而大大缩短处理大量复杂报表和分析的总体时间。

2.3. 创建分区函数
分区函数用于定义分区的边界条件,创建分区函数的语法如下:
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 中相应的值的大小和小数位数不匹配,则在隐式转换过程中该值不能被截断。

注意:
如果 boundary_value 包含 datetime 或 smalldatetime 文字值,则为这些文字值在计算时假设 us_english 是会话语言。不推荐使用此行为。要确保分区函数定义对于所有会话语言都具有预期的行为,建议使用对于所有语言设置都以相同方式进行解释的常量,例如 yyyymmdd 格式;或者将文字值显式转换为特定样式。有关详细信息,请参阅编写国际化 Transact-SQL 语句。若要确定服务器的语言会话,请运行 SELECT @@LANGUAGE。

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

 LEFT | RIGHT
指定当间隔值由 数据库引擎 按升序从左到右排序时,boundary_value [ ,...n ] 属于每个边界值间隔的哪一侧(左侧还是右侧)。如果未指定,则默认值为 LEFT。

创建分区函数示例:
CREATE PARTITION FUNCTION PF_Left(int)
AS RANGE LEFT
FOR VALUES(10, 20)
GO

CREATE PARTITION FUNCTION PF_Right(int)
AS RANGE LEFT
FOR VALUES(10, 20)
GO

PF_Left 和 PF_Right 分区函数的区分:
分区函数 分区1 分区2 分区3
PF_Left <= 10 > 10 and <= 20 > 20
PF_Right < 10 >= 10 and < 20 >= 20

2.4. 创建分区架构(Schema)
创建分区函数后,必须将其与分区架构(Schema)相关联,以便将分区定向至特定的文件组。定义分区架构师,即使多个分区位于同一个文件组中,也必须为每个分区指定一个文件组。

创建分区架构的语法如下:
GOCREATE 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 FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
GO
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg);
GO

2.5. 创建分区表
定义了分区函数(逻辑结构)和分区架构(物理结构)后,既可以创建分区表来利用它们。分区表定义应使用的分区架构,而分区架构又定义其使用的分区函数。要将这三者结合起来,必须指定应用于分区函数的列 。范围分区始终只映射到表中的一列。

CREATE TABLE 语法如下:
CREATE TABLE
[ database_name . [ schema_name ] . | schema_name . ] table_name
( { <column_definition> | <computed_column_definition> }
[ <table_constraint> ] [ ,...n ] )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup
| "default" } ]
[ { TEXTIMAGE_ON { filegroup | "default" } ]
[ ; ]

示例如下:
CREATE TABLE myRangePT1
(
ID int not null,
AGE int,
PRIMARY KEY (ID)
) ON myRangePS1(myRangePF1)
GO

2.6. 创建分区索引
索引对于提高查询性能非常有效,因此,一般应该考虑应该考虑为分区表建立索引,为分区表建立索引与为普通表建立索引的语法一直,但是,其行为与普通索引有所差异。

默认情况下,分区表中创建的索引使用与分区表相同分区架构和分区列,这样,索引将于表对齐。将表与其索引对齐,可以使管理工作更容易进行,对于滑动窗口方案尤其如此。若要启动分区切换,表的所有索引都必须对齐。

在创建索引时,也可以指定不同的分区方案(Schema)或单独的文件组(FileGroup)来存储索引,这样SQL Server 不会将索引与表对齐。

在已分区的表上创建索引(分区索引)时,应该注意以下事项:
 唯一索引
建立唯一索引(聚集或者非聚集)时,分区列必须出现在索引列中。此限制将使SQL Server只调查单个分区,并确保表中宠物的新键值。如果分区依据列不可能包含在唯一键中,则必须使用DML触发器,而不是强制实现唯一性。

 非唯一索引
对非唯一的聚集索引进行分区时,如果未在聚集键中明确指定分区依据列,默认情况下SQL Server 将在聚集索引列中添加分区依据列。
对非唯一的非聚集索引进行分区时,默认情况下SQL Server 将分区依据列添加为索引的包含性列,以确保索引与基表对齐,若果索引中已经存在分区依据列,SQL Server 将不会像索引中添加分区依据列。

3. 分区操作
分区适用于可以缩放的大型表,所以随着时间和环境的变化,就会产生对分区的拆分、合并、移动的需求。
3.1. 拆分与合并分区
通过拆分或合并边界值更改分区函数。通过执行 ALTER PARTITION FUNCTION,可以将使用分区函数的任何表或索引的某个分区拆分为两个分区,也可以将两个分区合并为一个分区。

注意:多个表或索引可以使用同一分区函数。ALTER PARTITION FUNCTION 在单个事务中影响所有这些表或索引。

ALTER PARTITION FUNCTION 语法如下:
ALTER PARTITION FUNCTION partition_function_name()
{
SPLIT RANGE ( boundary_value )
| MERGE RANGE ( boundary_value )
} [ ; ]

参数说明:
 partition_function_name
要修改的分区函数的名称。

 SPLIT RANGE ( boundary_value )
在分区函数中添加一个分区。boundary_value 确定新分区的范围,因此它必须不同于分区函数的现有边界范围。根据 boundary_value,Microsoft SQL Server 2005 数据库引擎将某个现有范围拆分为两个范围。在这两个范围中,新 boundary_value 所在的范围被视为是新分区。

重要提示:
文件组必须处于联机状态,并且必须由使用此分区函数的分区方案标记为 NEXT USED,以保存新分区。在 CREATE PARTITION SCHEME 语句中,将把文件组分配给分区。如果 CREATE PARTITION SCHEME 语句分配了多余的文件组(在 CREATE PARTITION FUNCTION 语句中创建的分区数少于用于保存它们的文件组),则存在未分配的文件组,分区方案将把其中的某个文件组标记为 NEXT USED。该文件组将保存新的分区。如果分区方案未将任何文件组标记为 NEXT USED,则必须使用 ALTER PARTITION SCHEME 添加一个文件组或指定一个现有文件组来保存新分区。可以指定已保存分区的文件组来保存附加分区。由于一个分区函数可以参与多个分区方案,因此所有使用分区函数(您向其中添加了分区)的分区方案都必须拥有一个 NEXT USED 文件组。否则,ALTER PARTITION FUNCTION 将失败并出现错误,该错误显示缺少 NEXT USED 文件组的一个或多个分区方案。

 MERGE [ RANGE ( boundary_value) ]
删除一个分区并将该分区中存在的所有值都合并到剩余的某个分区中。RANGE (boundary_value) 必须是一个现有边界值,已删除分区中的值将合并到该值中。如果最初保存 boundary_value 的文件组没有被剩余分区使用,也没有使用 NEXT USED 属性进行标记,则将从分区方案中删除该文件组。合并的分区驻留在最初不保存 boundary_value 的文件组中。boundary_value 是一个可以引用变量(包括用户定义类型变量)或函数(包括用户定义函数)的常量表达式。它无法引用 Transact-SQL 表达式。boundary_value 必须匹配或可以隐式转换为其对应列的数据类型,并且当值的大小和小数位数不匹配其对应 input_parameter_type 时,将无法在隐式转换过程中被截断。

B. sqlserver分区表类型

1. 分区表简介
分区表在逻辑上是一个表,而物理上是多个表。从用户角度来看,分区表和普通表是一样的。使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性。
分区表是把数据按设定的标准划分成区域存储在不同的文件组中,使用分区可以快速而有效管理和访问数据子集。
1.1> 适合做分区表的情况
◊ 数据库中某个表的数据很多,在查询数据时会明显感觉到速度很慢,这个时候需要考虑分区表;
◊ 数据是分段的,如以年份为分隔的数据,对于当年的数据经常进行增删改查操作,而对于往年的数据几乎不做操作或只做查询操作,这种情况可以使用分区表。对数据的操作如果只涉及一部分数据而不是全部数据的情况可以考虑分区表,如果一张表的数据经常使用且不管年份之类的因素经常对其增删改查操作则最好不要分区。
1.2> 分区表的优点
◊ 分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看还是一个大表。
◊ 对于具有多个CPU的系统,分区可以对表的操作通过并行的方式进行,可以提升访问性能。

2. 创建分区表步骤
创建分区表的步骤分为5步:
(1)创建数据库文件组
(2)创建数据库文件
(3)创建分区函数
(4)创建分区方案
(5)创建分区表

C. sqlserver查看哪些表有分区

SQLSERVER中,有时需要知道已经建了哪些分区表,从哪里看?
1、直接用SQL语句查:
--分区数大于1的,就是我们想查看的分区表:
SELECT p.*,'|' AS SP ,t.* FROM sys.partitions AS p
inner JOIN sys.tables AS t ON p.object_id = t.object_id
inner join (
select object_id as object_id2,index_id, count(*) AS CNT FROM sys.partitions
group by object_id,index_id
having count(*)>1
) s on s.object_id2 = p.object_id
WHERE p.partition_id IS NOT NULL
order by t.name;

2、在管理器中查看:
Databases > [数据库名称] 节点 > 存储(Storage) 节点 >
\ 分区架构(Partition Schemes ) 节点 > 选中一项 > 右键 > 查看依赖
\ 分区函数(Partition Functions ) 节点 > 选中一项 > 右键 > 生成脚本
3、有作多分区的表,属性的 存储(Storage) 会有 Partitioning 信息。

D. sql server 2008的版本功能

SQL Server 2008出现在微软数据平台愿景上是因为它使得公司可以运行他们最关键任务的应用程序,同时降低了管理数据基础设施和发送观察和信息给所有用户的成本。
这个平台有以下特点:
· 可信任的——使得公司可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。
· 高效的——使得公司可以降低开发和管理他们的数据基础设施的时间和成本。
· 智能的——提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。 一、可信任的
在今天数据驱动的世界中,公司需要继续访问他们的数据。SQL Server 2008为关键任务应用程序提供了强大的安全特性、可靠性和可扩展性。
(一)保护你的信息
在过去的SQL Server 2005的基础之上,SQL Server 2008做了以下方面的增强来扩展它的安全性:
简单的数据加密
SQL Server 2008可以对整个数据库、数据文件和日志文件进行加密,而不需要改动应用程序。进行加密使公司可以满足遵守规范和及其关注数据隐私的要求。简单的数据加密的好处包括使用任何范围或模糊查询搜索加密的数据、加强数据安全性以防止未授权的用户访问、还有数据加密。这些可以在不改变已有的应用程序的情况下进行。
外键管理
SQL Server 2008为加密和密钥管理提供了一个全面的解决方案。为了满足不断发展的对数据中心的信息的更强安全性的需求,公司投资给供应商来管理公司内的安全密钥。SQL Server 2008通过支持第三方密钥管理和硬件安全模块(HSM)产品为这个需求提供了很好的支持。
增强了审查
SQL Server 2008使你可以审查你的数据的操作,从而提高了遵从性和安全性。审查不只包括对数据修改的所有信息,还包括关于什么时候对数据进行读取的信息。SQL Server 2008具有像服务器中加强的审查的配置和管理这样的功能,这使得公司可以满足各种规范需求。SQL Server 2008还可以定义每一个数据库的审查规范,所以审查配置可以为每一个数据库作单独的制定。为指定对象作审查配置使审查的执行性能更好,配置的灵活性也更高。
(二)确保业务可持续性
有了SQL Server 2008,微软继续使公司具有提供简化了管理并具高可靠性的应用的能力。
改进了数据库镜像
SQL Server 2008基于SQL Server 2005,并提供了更可靠的加强了数据库镜像的平台。新的特性包括:
· 页面自动修复。SQL Server 2008通过请求获得一个从镜像合作机器上得到的出错页面的重新拷贝,使主要的和镜像的计算机可以透明的修复数据页面上的823和824错误。
· 提高了性能。SQL Server 2008压缩了输出的日志流,以便使数据库镜像所要求的网络带宽达到最小。
· 加强了可支持性
(1) SQL Server 2008包括了新增加的执行计数器,它使得可以更细粒度的对数据库管理系统(Database Management Syste,DBMS)日志记录的不同阶段所耗费的时间进行计时。
(2) SQL Server 2008包括动态管理视图(Dynamic Management View)和对现有的视图的扩展,以此来显示镜像会话的更多信息。
热添加CPU
为了在线添加内存资源而扩展SQL Server中的已有的支持,热添加CPU使数据库可以按需扩展。事实上,CPU资源可以添加到SQL Server 2008所在的硬件平台上而不需要停止应用程序。
(三)最佳的和可预测的系统性能
公司在面对不断增长的压力,要提供可预计的响应和对随着用户数目的增长而不断增长的数据量进行管理。SQL Server 2008提供了一个广泛的功能集合,使你的数据平台上的所有工作负载的执行都是可扩展的和可预测的。
性能数据的采集
性能调整和排除故障对于管理员来说是耗费时间的工作。为了给管理员提供全面的执行洞察力,SQL Server 2008推出了范围更大的数据采集,一个用于存储性能数据的新的集中的数据库,以及新的报表和监控工具。
扩展事件
SQL Server扩展事件是一个用于服务器系统的一般的事件处理系统。扩展事件基础设施是一个轻量级的机制,它支持对服务器运行过程中产生的事件的捕获、过滤和响应。这个对事件进行响应的能力使用户可以通过增加前后文关联数据,例如Transact SQL对所有事件调用堆栈或查询计划句柄,以此来快速的诊断运行时问题。事件捕获可以按几种不同的类型输出,包括Windows事件跟踪(Event Tracing for Windows,ETW)。当扩展事件输出到ETW时,操作系统和应用程序就可以关联了,这使得可以作更全面的系统跟踪。
备份压缩
保持在线进行基于磁盘的备份是很昂贵而且很耗时的。有了SQL Server 2008备份压缩,需要的磁盘I/O 减少了,在线备份所需要的存储空间也减少了,而且备份的速度明显加快了。
数据压缩
改进的数据压缩使数据可以更有效的存储,并且降低了数据的存储要求。数据压缩还为大型的限制输入/输出的工作负载例如数据仓库提供了显着的性能改进。
资源监控器
SQL Server 2008随着资源监控器的推出使公司可以提供持续的和可预测的响应给终端用户。资源监控器使数据库管理员可以为不同的工作负载定义资源限制和优先权,这使得并发工作负载可以为终端用户提供稳定的性能。
稳定的计划
SQL Server 2008通过提供了一个新的制定查询计划的功能,从而提供了更好的查询执行稳定性和可预测性,使公司可以在硬件服务器更换、服务器升级和产品部署中提供稳定的查询计划。 二、高效的
SQL Server 2008降低了管理系统、.NET架构和Visual Studio&reg; Team System的时间和成本,使得开发人员可以开发强大的下一代数据库应用程序。
(一)基于政策的管理
作为微软正在努力降低公司的总成本所作的工作的一部分,SQL Server 2008推出了陈述式管理架构(DMF),它是一个用于SQL Server数据库引擎的新的基于策略的管理框架。陈述式管理提供了以下优点:
· 遵从系统配置的政策
· 监控和防止通过创建不符合配置的政策来改变系统
· 通过简化管理工作来减少公司的总成本
· 使用SQL Server 管理套件查找遵从性问题
DMF是一个基于政策的用于管理一个或多个SQL Server 2008实例的系统。要使用DMF,SQL Server政策管理员使用SQL Server 管理套件创建政策,这些政策管理服务器上的实体,例如SQL Server的实例、数据库、和其它SQL Server对象。DMF由三个组件组成:政策管理、创建政策的政策管理员,和显式管理。管理员选择一个或多个要管理的对象,并显式检查这些对象是否遵守指定的政策,或显式地使这些对象遵守某个政策。
自动管理
政策管理员使用下面的执行模式之一,使政策自动执行:
· 强制——使用DDL触发器阻止违反政策的操作
· 对改动进行检查——当一个与某个政策相关的改动发生时,使用事件通知来评估这个政策
· 检查时间表——使用一个SQL Server Agent 工作定期的评估一个政策
(二)改进了安装
SQL Server 2008对SQL Server的服务生命周期提供了显着的改进,它重新设计了安装、建立和配置架构。这些改进将计算机上的各个安装与SQL Server软件的配置分离开来,这使得公司和软件合作伙伴可以提供推荐的安装配置。
(三)加速开发过程
SQL Server提供了集成的开发环境和更高级的数据提取,使开发人员可以创建下一代数据应用程序,同时简化了对数据的访问。
ADO .NET实体框架
在数据库开发人员中的一个趋势是定义高级的业务对象,或实体,然后他们可以将它们匹配到数据库中的表和字段,开发人员使用高级实体例如“客户”或“订单”来显示背后的数据。ADO .NET 实体框架使开发人员可以以这样的实体来设计关系数据。在这一提取级别的设计是非常高效的,并使开发人员可以充分利用实体关系建模。
语言级集成查询能力
微软的语言级集成查询能力(LINQ)使开发人员可以通过使用管理程序语言例如C#或Visual Basic .NET,而不是SQL语句来对数据进行查询。LINQ 使可以用.NET 框架语言编写的无缝和强大的面向集合的查询运行于ADO. NET(LINQ到SQL), ADO .NET 数据集(LINQ到数据集),ADO .NET 实体框架(LINQ到实体),和到实体数据服务匹配供应商。SQL Server 2008提供了一个新的LINQ到SQL供应商,使得开发人员可以直接将LINQ用于SQL Server 2008的表和字段。
CLR集成和ADO .NET对象服务
ADO .NET 的对象服务层使得可以进行具体化检索、改变跟踪、和实现作为公共语言运行时(CLR)的数据的可持续性。开发人员使用ADO .NET 实体框架可以通过使用由ADO .NET 管理的CLR对象对数据库进行编程。SQL Server 2008提供了提高性能和简化开发过程的更有效的和最佳的支持。
Service Broker可扩展性
SQL Server 2008继续加强了Service Broker 的能力。
· 会话优先权——使你可以配置优先权,使得最重要的数据会第一个被发送和进行处理。
· 诊断工具——诊断工具提高了你开发、配置和管理使用了Service Broker的解决方案的能力,例如在应用程序部署之前诊断分支丢失情况或配置不正确的安全问题。
Transact-SQL的改进
SQL Server 2008通过几个关键的改进增强了Transact-SQL编程人员的开发体验。
· Table Value Parameters – 在许多客户的场景中,要传递一个表结构的值(行)的集合到服务器上的一个存储过程或函数中。这些值可能直接用于插入表或更新表,或者是用于更复杂的数据操作。值为表的参数为定义一个表类型和使应用程序创建、赋值和传递表结构的参数到存储过程和函数中提供了更简单的方式。
· 对象相关性——对象相关性的改进通过新推出的种类查看和动态管理功能使能够可靠的找出对象间的相关性。相关性信息总是关于绑定架构和未绑定架构的对象的最新的信息。这个相关性会跟踪存储过程、表、视图、函数、触发器、用户定义的类型、XML schema集合和其他对象。
· 日期/时间数据类型——SQL Server 2008推出了新的日期和时间数据类型:
(1) DATE——一个只包含日期的类型,只使用3个字节来存储一个日期
(2) TIME——一个只包含时间的类型,只使用3到5个字节来存储精确到100纳秒时间
(3) DATETIMEOFFSET – 一个可辨别时区的日期/时间类型
(4) DATETIME2 ——一个具有比现有的DATETIME类型更精确的秒和年范围的日期/时间类型
新的数据类型使应用程序可以有单独的日期和时间类型,同时为用户定义的时间值的精度提供较大的数据范围。
(四)偶尔连接系统
有了移动设备和活动式工作人员,偶尔连接成为了一种工作方式。SQL Server 2008推出了一个统一的同步平台,使得在应用程序、数据存储和数据类型之间达到一致性同步。在与Visual Studio 的合作下,SQL Server 2008使得可以通过ADO .NET中提供的新的同步服务和Visual Studio中的脱机设计器快速的创建偶尔连接系统。SQL Server 2008提供了支持,使得可以改变跟踪和使客户可以以最小的执行消耗进行功能强大的执行,以此来开发基于缓存的、基于同步的和基于通知的应用程序。
(五)不只是关系数据
应用程序正在结合使用越来越多的数据类型,而不仅仅是过去数据库所支持的那些。SQL Server 2008基于过去对非关系数据的强大支持,提供了新的数据类型使得开发人员和管理员可以有效的存储和管理非结构化数据,例如文档和图片。还增加了对管理高级地理数据的支持。除了新的数据类型,SQL Server 2008还提供了一系列对不同数据类型的服务,同时为数据平台提供了可靠性、安全性和易管理性。这篇白皮书的下一章节将介绍非关系数据存储的一些优点。
HIERARCHY ID
SQL Server 2008使数据库应用程序以比以前更有效的方式建立树结构。HierarchyId是一个新的系统类型,它可以存储一个层次树中显示的结点的值。这个新的类型提供了一个灵活的编程模型。它作为一个CLR用户定义的类型(UDT)来执行,它提供了几种用于创建和操作层次结点的有效的及有用的内置方法。
FILESTREAM数据
新的SQL Server 2008 FILESTREAM 数据类型使大型的二进制数据,像文档和图片等可以直接存储到一个NTFS文件系统中;文档和图片仍然是数据库的主要组成部分,并维护事务的一致性。
FILESTREAM 使传统的由数据库管理的大型二进制数据可以作为单独的文件存储在数据库之外,它们可以通过使用一个NTFS流API进行访问。使用NTFS流API使普通文件操作可以有效的执行,同时提供所有丰富的数据库服务,包括安全和备份。
集成的全文检索
集成的全文检索使得在全文检索和关系数据之间可以无缝的转换,同时使全文索引可以对大型文本字段进行高速的文本检索。
稀疏列
这个功能使NULL数据不占物理空间,从而提供了一个非常有效的管理数据库中的空数据的方法。例如,稀疏列使得一般包含极多要存储在一个SQL Server 2008数据库中的空值的对象模型不会占用很大的空间。稀疏列还允许管理员创建1024列以上的表。
大型的用户定义的类型
SQL Server 2008删除了对用户定义的类型的8,000字节的限制,使用户可以显着的扩大他们的UDT的规模。
地理信息
SQL Server 2008为在基于空间的应用程序中消耗、扩展和使用位置信息提供了广泛的空间支持。
· 地理数据类型
这个功能使你可以存储符合行业空间标准例如开放地理空间联盟(Open Geospatial Consortium,OGC)的平面的空间数据。这使得开发人员可以通过存储与设计的平面表面和自然的平面数据例如内部空间等相关联的多边形、点和线来实现“平面地球”解决方案。
· 几何数据类型
这个功能使你可以存储地理空间数据并对其执行操作。使用纬度和经度的组合来定义地球表面的区域,并结合了地理数据和行业标准椭圆体(例如用于全球GPS解决方案的WGS84)。 三、智能的
商业智能(BI)继续作为大多数公司投资的关键领域和对于公司所有层面的用户来说的一个无价的信息源。SQL Server 2008提供了一个全面的平台,用于当用户需要时你可以为其提供智能化。
(一)集成任何数据
公司继续投资于商业智能和数据仓库解决方案,以便从他们的数据中获取商业价值。SQL Server 2008提供了一个全面的和可扩展的数据仓库平台,它可以用一个单独的分析存储进行强大的分析,以满足成千上万的用户在几兆字节的数据中的需求。下面是SQL Server 2008中在数据仓库方面的一些优点。
数据压缩
数据仓库中的数据容量随着操作系统数目的快速增加而在持续增长。内嵌在SQL Server 2008中的数据压缩使得公司可以更有效的存储数据,同时还提高了性能,因为降低了I/O 要求。
备份压缩
保持一直在线做基于磁盘的备份是花费很昂贵的,并且很耗时。有了SQL Server 2008的备份压缩,保持在线备份所需的存储降低了,并且备份速度明显变快了,因为所需要的磁盘I/O 减少了。
分区表并行
分割使公司能够更有效的管理大型的、不断增长的数据表,只要简单的将它们分割为易管理的数据块。SQL Server 2008是在SQL Server 2005中的分割的优势之上建立的,它改进了对大型的分区表的操作性能。
星型联接查询优化器
SQL Server 2008为普通的数据仓库场景提供了改进的查询性能。星型联接查询优化器通过辨别数据仓库连接模式降低了查询响应时间。
资源监控器
SQL Server 2008随着资源监控器的推出,使公司可以给终端用户提供一致的和可预测的响应。资源监控器使公司可以为不同的工作负载定义资源限制和优先权,这使得并发工作负载可以提供稳定的性能。
分组设置
分组设置(GROUPING SETS)是对 GROUP BY 条件语句的扩展,它使得用户可以在同一个查询中定义多个分组。分组设置生成一个单独的结果集,这个结果集相当于对不同分组的行进行了UNION ALL 的操作,这使得聚合查询和报表更加简单和快速。
捕获变更数据
有了捕获变更数据,变更会被捕获并被放在变更表中。它捕获变更的完整内容,维护交叉表的一致性,甚至是对交叉的schema变更也起作用。这使得公司可以将最新的信息集成到数据仓库中。
MERGESQL语句
有了MERGE SQL 语句,开发人员可以更有效地处理数据仓库的场景,例如检查一行数据是否存在然后执行插入或更新。
可扩展的集成服务
集成服务的可扩展性方面的两个关键优势是:
· SQL Server集成服务 (SQL Server Integration Services,SSIS)管道改进
数据集成包现在可以更有效地扩展、使用有效的资源和管理最大的企业级的工作负载。这个新的设计将运行时间的可扩展性提高到多个处理器中。
· SSIS持久查找
执行查找是最常见的抽取、转换和加载(ETL)操作。这在数据仓库中尤为普遍,当实际记录必须使用查找来转换业务键到它们相应的替代中去时。SSIS 增强了查找的性能以支持大型表。
(二)发送相应的报表
SQL Server 2008提供了一个可扩展的商业智能基础设施,使得IT人员可以在整个公司内使用商业智能来管理报表以及任何规模和复杂度的分析。SQL Server 2008使得公司可以有效的以用户想要的格式和他们的地址发送相应的、个人的报表给成千上万的用户。通过提供了交互发送用户需要的企业报表,获得报表服务的用户数目大大增加了。这使得用户可以获得对他们各自领域的洞察的相关信息的及时访问,使得他们可以作出更好、更快、更符合的决策。SQL Server 2008使得所有的用户可以通过下面的报表改进之处来制作、管理和使用报表:
企业报表引擎
有了简化的部署和配置,可以在企业内部更简单的发送报表。这使得用户能够轻松的创建和共享所有规模和复杂度的报表。
新的报表设计器
改进的报表设计器可以创建广泛的报表,使公司可以满足所有的报表需求。独特的显示能力使报表可以被设计为任何结构,同时增强的可视化进一步丰富了用户的体验。
此外,报表服务2008使商业用户可以在一个可以使用Microsoft Office的环境中编辑或更新现有的报表,不论这个报表最初是在哪里设计的,从而使公司能够从现有的报表中获得更多的价值。
强大的可视化
SQL Server 2008扩展了报表中可用的可视化组件。可视化工具例如地图、量表和图表等使得报表更加友好和易懂。
Microsoft Office渲染
SQL Server 2008提供了新的Microsoft Office渲染,使得用户可以从Word里直接访问报表。此外,现有的Excel&reg; 渲染器被极大的增强了,它被用以支持像嵌套数据区域、子报表和合并单元格等功能。这使得用户可以维护显示保真度和改进Microsoft Office应用中所创建的报表的全面可用性。
Microsoft SharePoint&reg; 集成
SQL Server 2008报表服务将Microsoft Office SharePoint Server 2007和Microsoft SharePoint Services 深度集成,提供了企业报表和其它商业洞察的集中发送和管理。这使得用户可以访问包含了与他们直接在商业门户中所做的决策相关的结构化和非结构化信息的报表。
(三)使用户获得全面的洞察力
及时访问准确信息,使用户快速对问题、甚至是非常复杂的问题作出反应,这是在线分析处理的前提(Online Analytical Processing,OLAP)。SQL Server 2008基于SQL Server 2005强大的OLAP能力,为所有用户提供了更快的查询速度。这个性能的提升使得公司可以执行具有许多维度和聚合的非常复杂的分析。这个执行速度与Microsoft Office的深度集成相结合,使SQL Server 2008可以让所有用户获得全面的洞察力。SQL Server分析服务具有下面的分析优势:
设计为可扩展的
SQL Server 2008加强了分析能力和提供了更复杂的计算和聚合,使得能进行的分析更宽广。新的立方体设计工具帮助用户将分析基础设施的开发工作流线化,使他们可以为优化性能建立解决方案。这个设计里内嵌了Best Practice Design Alerts,使得开发人员可以在设计时集成实时警告,这优化了设计。Dimension Designer使得可以简单的查看和编辑属性关系,还可以提供多个内置的对理想尺度设计的支持的验证,而在数据挖掘结构中增强的灵活性使得可以创建多个不同的模型,而不仅仅是过滤数据。
块计算
块计算提供了一个在处理性能方面的显着提高,使得用户可以增加他们的层级深度和计算的复杂度。
回写到MOLAP
SQL Server 2008分析服务中的新的基于MOLAP 的回写功能使得不再需要查询ROLAP 分区。这给用户提供了更强的用于分析应用程序中的回写设定,而不需要以OLAP 性能为代价。
资源监控器
在SQL Server 2008中一个新的资源监控器提供了对资源利用情况的详细观察。有了这个资源监控器,数据库管理员可以快速并轻松的监控和控制分析工作负载,包括识别哪个用户在运行什么查询和他们会运行多久,这使得管理员可以更好的优化服务器的使用。
预测分析
一个改进的时间序列算法扩大了预测能力。这个查询数据挖掘结构的能力使得报表可以很容易的包含从挖掘模型的外部得来的属性。新的交叉验证特性对数据进行多处对比,发送给你可靠的结果。这些数据挖掘的改进之处一起为更好的洞察和更丰富的信息提供了机会。

E. 如何对一个已经存在的SQL Server表分区

有两种方法可以实现对一个表分区.一是创建一个新的标识为分区表的表(你可参照此步骤),然后把数据复制到这张新表,再对这两张表分别改名.或者,像我写在下面的,通过重建或创建一个聚集索引来达到分区一个表.
一个SQL Server表和数据进行分区示例
--Table/Index creation
CREATE TABLE [dbo].[TABLE1]
([pkcol] [int] NOT NULL,
[datacol1] [int] NULL,
[datacol2] [int] NULL,
[datacol3] [varchar](50) NULL,
[partitioncol] datetime)
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol)
GO
CREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
-- Populate table data
DECLARE @val INT
SELECT @val=1
WHILE @val < 1000
BEGIN
INSERT INTO dbo.Table1(pkcol, datacol1, datacol2, datacol3, partitioncol)
VALUES (@val,@val,@val,'TEST',getdate()-@val)
SELECT @val=@val+1
END
GO
通过查看sys.partitions系统视图,上面的代码创建了一个传统的单分区表.
SELECT o.name objectname,i.name indexname, partition_id, partition_number, [rows]
FROM sys.partitions p
INNER JOIN sys.objects o ON o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.object_id=p.object_id and p.index_id=i.index_id
WHERE o.name LIKE '%TABLE1%'

objectname

indexname

partition_id

partition_number

rows

TABLE1 PK_TABLE1 72057594042712064 1 999
TABLE1 IX_TABLE1_col2col3 72057594042777600 1 999

创建已分区的SQL Server表
为了创建一个分区表,需要先创建一个分区函数和分区方案. 下面的示例中,将通过datatime字段对一个表分区. 这里是创建这些对象与在系统视图中查看这些元数据的代码.
CREATE PARTITION FUNCTION myDateRangePF (datetime)
AS RANGE RIGHT FOR VALUES ('20110101', '20120101','20130101')
GO
CREATE PARTITION SCHEME myPartitionScheme
AS PARTITION myDateRangePF ALL TO ([PRIMARY])
GO
SELECT ps.name,pf.name,boundary_id,value
FROM sys.partition_schemes ps
INNER JOIN sys.partition_functions pf ON pf.function_id=ps.function_id
INNER JOIN sys.partition_range_values prf ON pf.function_id=prf.function_id
现在我们有一个分区方案,可对表进行分区操作. 既然我们想通过聚集索引来对一个创建了聚集索引的表进行分区,我们需要先删除掉这个索引并通过一个非聚集索引重建这个约束. 若这张表没有聚集索引,我们可忽略这一步,直接执行创建聚集索引语句. 类似地,若有一个聚集索引创建在分区字段上,我们可执行带DROP_EXISTING的创建聚集索引语句. 最后,若关注于执行此任务时数据库停止服务时间并且你使用的是SQL Server企业版本,可通过创建索引的ONLINE=ON选项来使数据库的停止服务时间最小. 记住,在使用ONLINE选项重建索引时,你可能会看到一些性能降低的现象. 这里是一些可能会乃至的脚本.
ALTER TABLE dbo.TABLE1 DROP CONSTRAINT PK_TABLE1
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY NONCLUSTERED (pkcol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE CLUSTERED INDEX IX_TABLE1_partitioncol ON dbo.TABLE1 (partitioncol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON myPartitionScheme(partitioncol)
GO
在这些语句结束后,我们可再次查看sys.partitions系统视图(看上面的代码)并确认我们的表有4个分区.

objectname

indexname

partition_id

partition_number

rows

TABLE1 IX_TABLE1_partitioncol 72057594043039744 1 233
TABLE1 IX_TABLE1_partitioncol 72057594043105280 2 365
TABLE1 IX_TABLE1_partitioncol 72057594043170816 3 366
TABLE1 IX_TABLE1_partitioncol 72057594043236352 4 35
TABLE1 IX_TABLE1_col2col3 72057594043301888 1 999
TABLE1 PK_TABLE1 72057594043367424 1 999
SQL Server表和数据示例清除
--cleanup
DROP TABLE TABLE1
DROP PARTITION SCHEME myPartitionScheme
DROP PARTITION FUNCTION myDateRangePF

F. SQLServer2008中的数据压缩功能

SQL Server SP 为我们带来了vardecimal功能 这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储 据称这项功能可以为典型的数据仓库节省 %的空间 而SQL Server 在这一基础上又进一步增强了数据压缩功能 SQL Server 现在支持行压缩和页面压缩两种选项 数据压缩选项可以在以下对象上启用

未创建聚簇索引的表

创建聚簇索引的表

非聚簇索引(对表设置压缩选项不会影响到该表上的非聚簇索引 因此聚簇索引的压缩需要单独设置)

索引视图

分区表和分区索引中的单个分区

为什么需要数据压缩

首先可能需要讨论的问题就是为什么在存储成本不断降低的今天 微软还要煞费苦心地在SQL Server中实现并且不断改进数据压缩技术呢?

尽管存储成本已经不再是传统意义上的首要考虑因素 但是这并不代表数据库尺寸不是一个问题 因为数据库尺寸除了会影响到存储成本之外 还极大地关联到管理成本和性能问题

首先我们来讨论为什么会有管理成本的问题?因为数据库需要备份 数据库的尺寸越大 那么备份时间就会越长 当然另外一点就是消耗的备份硬件成本也会随之提高(包括需要的备份介质成本和为了满足备份窗口而需要更高级的备份设备带来的采购成本) 还有一种管理成本就是数据库的维护成本 例如我们经常需要完成的DBCC任务 数据库尺寸越大 我们就需要更多的时间来完成这些任务

接着我们再看看性能问题 SQL Server在扫描磁盘读取数据的时候都是按照数据页为单位进行读取的 因此如果一张数据页中包含的数据行数越多 SQL Server在一次数据页IO中获得的数据就会越多 这样也就带来了性能的提升

最后考虑存储的成本 按照原先SQL Server SP 中vardecimal的压缩数据为例 %的空间节省也就意味着 %的存储成本 而按照SQL Server 当前放出的测试数据 采用新的数据压缩技术可以达到 X X的存储率 再加上如果企业要考虑容灾而增加的存储空间 这样节省的存储硬件成本也将是想当可观的

如何使用数据压缩

SQL Server 中的压缩选项可以在创建表或索引时通过Option进行设置 例如 CREATE TABLE TestTable (col int col varchar( )) WITH (DATA_PRESSION = ROW);

如果需要改变一个销渗销分区亏游的压缩选项 则可以用以下语句 ALTER TABLE TestTable REBUILD PARTITION = WITH (DATA PRESSION = PAGE);

如果需要为分区表的各个分区设置不同的压缩选项 可以使用以下的语句 (SQL Server 可以对不同的分区使用不同的压缩选项 这一点对于数据仓库应用是非常重要的 因为数据仓库的事实表通常都会有一个或数个热分区 这些分区中的数据经常需要更新 为了避免数据压缩给这些分区上的数据更新带来额外的处理载荷 可以对这些分区关闭压缩选项) CREATE TABLE PartitionedTable (col int col varchar( )) ON PS (col )喊册 WITH ( DATA_PRESSION = ROW ON PARTITIONS( ) DATA_PRESSION = PAGE ON PARTITION( TO ));

如果是为某个索引设置压缩选项的话 可以使用

CREATE INDEX IX_TestTable_Col ON TestTable (Col ) WITH (DATA_PRESSION = ROW);

如果是修改某个索引的压缩选项 可以使用 ALTER INDEX IX_TestTable_Col ON TestTable REBUILD WITH (DATA_PRESSION = ROW);

SQL Server 同时还提供了一个名为sp_estimate_data_pression_savings存储过程帮助DBA估计激活压缩选项后对象尺寸

数据压缩是怎样工作的

对于行压缩 SQL Server 采用以下三种方法来节省存储空间

减少了与记录相关联的元数据开销 此元数据为有关列 列长度和偏移量的信息 在某些情况下 元数据开销可能大于旧的存储格式

它对于数值类型(例如 integer decimal和float)和基于数值的类型(例如 datetime和money)使用可变长度存储格式

它通过使用不存储空字符的可变长度格式来存储定长字符串

对于页面压缩 SQL Server 则是在一张数据页面上依次采用

行压缩

前缀压缩

字典压缩

配置数据压缩功能需要注意的

尽管SQL Server 的数据压缩功能非常有价值 但是仍然需要注意一些问题

数据压缩功能仅在企业版和开发版中可用

数据压缩可以让一张数据页存储更多的数据行 但是并不能改变单行数据最长 字节这一限制

在一张已经设置了数据压缩的表上创建聚簇索引时 聚簇索引默认继承原表上的压缩选项

在未设置聚簇索引的表上设置页面压缩时 只有以下情况才会获得页面压缩的实际效果

数据使用BULK INSERT语法添加到表中

数据使用INSERT INTO WITH (TABLOCK)语法添加到表中

执行带有页面压缩选项的ALTER TABLE REBUILD命令

在未设置聚簇索引的表上更改压缩选项 会导致该表上所有非聚簇索引都需要重建 因为这些非聚簇索引指向的数据行地址已经都发生了改变

在改变压缩选项时所需要的临时空间大小与创建索引是所需要的空间是一样的 因此对于分区表 我们可以逐个分区设置压缩选项来减少临时空间的需求压力

由于SQL Server 中数据压缩技术其实是SQL Server SP 中vardecimal技术的一个超集 因此设置了数据压缩后就没有必要保留vardecimal了 当然SQL Server 为了保持向后兼容性 在当前版本中仍然保留了vardecimal 但是SQL Server 的下一个版本及可能就会弃用vardecimal选项 因此做了这些设置的数据库应该尽早改变到数据压缩设置下

lishixin/Article/program/Oracle/201311/17483

热点内容
访问跳转 发布:2024-11-28 15:54:44 浏览:697
算法对算 发布:2024-11-28 15:41:38 浏览:3
称重系统界面如何找配置项 发布:2024-11-28 15:28:29 浏览:569
vue能被反编译嘛 发布:2024-11-28 15:23:59 浏览:79
gl和中配哪个配置好 发布:2024-11-28 15:20:01 浏览:235
linuxandroid嵌入式 发布:2024-11-28 15:18:58 浏览:200
服务密码是啥有什么用 发布:2024-11-28 15:08:48 浏览:164
编程王国 发布:2024-11-28 15:05:12 浏览:977
ftp服务器对什么硬件要求高 发布:2024-11-28 14:45:10 浏览:650
sql服务管理器下载 发布:2024-11-28 14:45:02 浏览:772