`
阅读更多

前言:一个好的系统,数据库的设计尤为重要,可以说它影响着程序性能。

(一)表空间及分区概念

表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间;

分区表:当表中的数据量不断增大,查询数据的速度就会变慢(对表做写操作时表索引需要重新排序),应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个“表空间”(物理文件上),这样查询数据时,不至于每次都扫描整张表而只是从当前的分区查到所要的数据大大提高了数据查询的速度;

(二)什么时候使用分区表

表的大小超过2GB;
表中包含历史数据,新的数据被增加到新的分区中;数据需要某种条件分块维护;

(三)表分区的优缺点

优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度;
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能;
缺点:
已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

(四)表分区的几种类型及操作方法

1、Range分区
Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。如按照时间划分,2015年11月的数据放到p1分区,12月的数据放到p2分区,在创建的时候,需要指定基于的列,以及分区的范围值。在按时间分区时,如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在分区中;

create table tableTest (id number, times date) partition by range (times)
(
   partition p1 values less than (to_date('2015-10-1', 'yyyy-mm-dd')),
   partition p2 values less than (to_date('2015-11-1', 'yyyy-mm-dd')),
   partition p3 values less than (to_date('2015-12-1', 'yyyy-mm-dd')),
   partition p4 values less than (maxvalue)
);
-- 18次插入操作
insert into tableTest(id,times)values(1,sysdate);
commit;
select count(*) from tableTest;
select count(*) from tableTest partition(p3);
1 行已插入。
1 行已插入。
1 行已插入。
已提交。
  COUNT(*)
----------
        18 

  COUNT(*)
----------
        18 

 从结果我们不难看出,2015年11月13日我们的数据都根据分区设定的条件放到了p3区。

CREATE TABLE tableTest(TEST_ID NUMBER NOT NULL PRIMARY KEY,STATUS CHAR(1))
PARTITION BY RANGE (tableTest)(
  PARTITION PAR1 VALUES LESS THAN (100000) TABLESPACE TABLESPACE1,
  PARTITION PAR2 VALUES LESS THAN (200000) TABLESPACE TABLESPACE2
);

 这个例子是我们以ID分区,前10万条数据放到第一分区,且第一分区我们存到了TABLESPACE1表空间下,

10万到20万的数据我们放到TABLESPACE2表空间下;

 

2、Hash分区:
对于那些无法有效划分范围的表,可以使用hash分区,这样对于提高性能还是会有一定的帮助。hash分区会将表中的数据平均分配到你指定的几个分区中,列所在分区是依据分区列的hash值自动分配,因此你并不能控制也不知道哪条记录会被放到哪个分区中,hash分区也可以支持多个依赖列。

create table tableTest(transaction_id number primary key,item_id number(8) not null)
partition by hash(transaction_id)(
  partition part_01 tablespace tablespace01,
  partition part_02 tablespace tablespace02,
  partition part_03 tablespace tablespace03
);

 

3、List分区:
List分区也需要指定列的值,其分区值必须明确指定,该分区列只能有一个,不能像range或者hash分区那样同时指定多个列做为分区依赖列,但它的单个分区对应值可以是多个。在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存储那些不在指定范围内的记录,类似range分区中的maxvalue分区。根据某字段,如城市代码分区时,可以指定default,把非分区规则的数据,全部放到这个default分区。

create table custaddr(id varchar2(15 byte) not null,areacode varchar2(4 byte))
partition by list (areacode)( 
  partition t_list025 values ('025'), 
  partition t_list372 values ('372') , 
  partition t_list510 values ('510'),
  partition p_other values (default)
);

 

0
0
分享到:
评论

相关推荐

    数据库物理设计及分区设计

    **分区表设计原则:** - **数据分布均匀**:确保每个分区的数据量大致相等,避免热点问题。 - **分区键的选择**:选择最常用于查询条件的列作为分区键,以提高查询性能。 - **分区类型**:常见有范围分区(range ...

    oralce数据库表分区介绍

    以下是关于Oracle数据库表分区的详细介绍: 1. **范围分区** (Range Partitioning): 范围分区是根据某个列的值范围来划分分区。例如,上述示例中创建的`sales`表按销售日期`sale_date`进行范围分区,将1999年的...

    5、ClickHouse查看数据库容量、表的指标、表分区、数据大小等

    本篇文章主要介绍了如何在ClickHouse中查看数据库容量、表的指标、表分区以及数据大小等关键信息。 一、查看数据库容量 要查看ClickHouse数据库的总容量,可以查询`system.parts`系统表。以下查询返回每个表的总行...

    DB2和orcale数据库表分区方法和数据库的备份与恢复

    DB2和Oracle数据库表分区方法和数据库备份与恢复 DB2数据库表分区是指将大型表拆分为多个小的、独立的部分,每个部分称为一个分区。分区的目的是为了提高表的可管理性、可扩展性和查询性能。DB2数据库提供了 RANGE ...

    mysql 数据库表分区

    MySQL 数据库表分区是一种优化大数据查询的技术,尤其适用于存储海量数据的应用场景。通过将大表分成更小、更易管理的部分,分区可以提高查询性能,减少数据处理的时间,并且简化数据管理和备份过程。 1. **分区...

    sqlServer数据库大表分区方案

    ### SQL Server 大表分区...通过合理的分区设计,可以显著提高数据库的查询和更新性能,尤其是在面对千万级别的大表时。在实际应用中,还需要根据具体业务需求和技术环境来调整分区策略,以达到最佳的性能优化效果。

    PostgreSQL表分区和子表及删除所有的数据库表.zip

    PostgreSQL表分区和子表及删除所有的数据库表 最近需求要求统计DNS近7天每天的解析情况。数据量相对大,所以我这边对表进行分区。 对每天的数据进行分区存储。主表只存储近7天的数据,7天之前的数据删掉。所以我...

    数据库表分区工具1.2

    "数据库表分区工具1.2"正是为了解决手动创建分区表的复杂性而设计的,它提供了用户友好的界面和自动化流程,使得建表过程更为便捷。 在传统的数据库操作中,创建分区表需要编写复杂的SQL语句,这不仅要求DBA或开发...

    4-软件数据库设计文档模板.docx

    基表设计是数据库设计的重要组成部分,涉及到数据库表结构的设计。在基表设计阶段,我们需要确定数据库表的结构,包括字段类型、字段长度、索引等。 视图设计 视图设计是数据库设计的重要组成部分,涉及到数据库...

    7 数据库锁和表分区.ppt

    【数据库锁】 数据库锁是数据库管理系统中用于控制并发操作的一种机制,确保多个用户在访问同一数据...在设计数据库系统时,应根据业务需求和数据特性,综合考虑锁的使用和分区策略,以达到最佳的并发控制和性能表现。

    oracle数据库表分区实例

    ### Oracle数据库表分区实例 #### 一、Oracle表分区简介 在Oracle数据库中,表分区是一种将大型表物理地划分为多个较小部分的技术。通过合理地利用分区技术,可以显著提高查询性能,简化数据管理任务,并加快数据...

    oracle数据库表按年分区脚本实战例子

    "Oracle数据库表按年分区脚本实战例子"是针对这一主题的具体实践教程,旨在帮助用户理解和掌握如何为Oracle表创建按年分区的脚本。 首先,我们需要了解分区的基本类型。Oracle支持多种分区策略,包括范围分区...

    手把手教你建立SQL数据库的表分区

    在数据库管理中,表分区是一种优化策略,它将大型表的数据分成更小、更易管理和访问的部分,从而提高查询性能和管理效率。本教程将指导你如何在SQL数据库中设置表分区,以实现数据的高效存储和检索。 首先,创建一...

    Oracle表分区详解(优缺点)

    此外,分区会增加数据库的复杂性,可能需要更多的存储空间,并且对数据库设计和维护提出了更高要求。 Oracle表分区主要有以下几种类型: 1. 范围分区:根据分区键的值范围将数据分配到各个分区。例如,销售数据...

    杨廷琨 - 从分区到Sharding:数据库核心业务表的分区设计

    杨廷琨在"从分区到Sharding:数据库核心业务表的分区设计"这一主题中详细探讨了Oracle数据库在不同版本中分区技术的演进、Sharding技术的介绍、分区设计的最佳实践以及分区设计的新特性。接下来,我们将从这些方面...

    mysql数据库表分区教程

    MySQL 数据库表分区教程 MySQL 数据库表分区是指将一个大表根据某些条件分割成多个小表,以提高数据库的可伸缩性、可管理性和效率。 MySQL 5.1 开始支持数据表分区。 什么是表分区 表分区是指将一个大表根据某些...

    学生宿舍管理系统数据库设计案例

    虽然内容未直接提及物理设计,但这是数据库设计的最后一步,涉及数据在硬盘上的存储方式、索引构建、分区策略等,以确保高效的数据存取。 5. 实施与维护: 系统开发完成后,会进行部署、测试和持续的维护,以适应...

    教务管理系统 数据库设计

    逻辑设计是在概念设计的基础上,进一步细化实体、属性和联系,形成具体的数据库表结构。 - **学生信息表**(Student):包括学号、姓名、性别等信息。 - **教师信息表**(Teacher):包含教师编号、姓名、性别等。 ...

Global site tag (gtag.js) - Google Analytics