zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

数据库知识学习,数据库设计优化攻略(六)

2023-04-18 14:59:40 时间

3.1.2 表分区,索引分区 (优化①粗略的进行了表分区,优化②为精确数据分区)

为什么要表分区?

当一个表的数据量太大的时候,我们最想做的一件事是什么?将这个表一分为二或者更多分,但是表还是这个表,只是

将其内容存储分开,这样读取就快了 N 倍了

原理:表数据是无法放在文件中的,但是文件组可以放在文件中,表可以放在文件组中,这样就间接实现了表数据存放

在不同的文件中。能分区存储的还有:表、索引和大型对象数据 。

SQL SERVER 2005 中,引入了表分区的概念, 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能

就会下降,这时就应该考虑对表进行分区,当一个表里的数据很多时,可以将其分拆到多个的表里,因为要扫描的数据变得更

少 ,查询可以更快地运行,这样操作大大提高了性能,表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物

理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表

什么时候使用分区表:

1、表的大小超过 2GB。

2、表中包含历史数据,新的数据被增加到新的分区中。

表分区的优缺点

表分区有以下优点:

1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

4、均衡 I/O:可以把不同的分区映射到磁盘以平衡 I/O,改善整个系统性能。

缺点:

分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能.

表分区的操作三步走

3.1.2.1 创建分区函数

CREATE PARTITION FUNCTION xx1(int) AS RANGE LEFT FOR VALUES (10000, 20000);

注释:创建分区函数:myRangePF2,以 INT 类型分区,分三个区间,10000 以内在 A 区,1W-2W 在 B 区,2W 以上

在 C 区.

3.1.2.2 创建分区架构

CREATE PARTITION SCHEME myRangePS2 AS PARTITION xx1 TO (a, b, c);

注释:在分区函数 XX1 上创建分区架构:myRangePS2,分别为 A,B,C 三个区间 A,B,C 分别为三个文件组的名称,

而且必须三个 NDF 隶属于这三个组,文件所属文件组一旦创建就不能修改

3.1.2.3 对表进行分区

常用数据规范--数据空间类型修改为:分区方案,然后选择分区方案名称和分区列列表,结果如图所示:

也可以用 sql 语句生成

 CREATE TABLE [dbo].[AvCache]( 
[AVNote] [varchar](300) NULL,
[bb] [int] IDENTITY(1,1)
) ON [myRangePS2](bb); --注意这里使用[myRangePS2]架构,根据 bb 分区