Oracle11高性能开发--(1)表概念

本文介绍了Oracle数据库中不同类型的表结构(堆表、索引组织表、分区表等),并详细探讨了各种索引(B树索引、位图索引、Hash索引等)的创建方式及适用场景。

近期做了一个Oracle大批量数据导入、处理、查询的项目,看了不少官方文档和书籍。把相关技术知识点简单整理一下,作为一个专题以供留存。

推荐书籍

  • 《Oracle性能诊断艺术》
  • 《Oracle高效设计》
  • Oracle官方文档

表分类

堆表Ordinary (heap-organized) table

默认表类型,索引和数据分开存储

索引组织表Index-organized table

  • 含义:主键索引采用Btree存储,主键索引和表数据储存在一起。
  • 适用场景:索引组织表可以加快通过主键访问数据的速度,用于经常对数据根据主键进行访问的场景。

分区表Partitioned table

  • 含义:对表的数据根据特定列值进行拆分为不同的储存空间
  • 优点
    1. 查询可以只针对部分分区,而不是全表,提升查询性能;
    2. 在使用分区索引的情况下,可以加快insert、delete性能
    3. 对数据的清理和维护更加方便(可单独对分区中的数据进行维护)
  • 适用场景
    1. 大于2GB的表应当被分区
    2. 包含历史数据的表可以使用分区,新的数据放在新的分区,老数据可以简便的被删除和转移。
    3. 表数据被分割在不同的存储设备上。
      索引组织表也可被分区
  • 分区策略
    1. 列表分区:以列的值作为分区的划分条件
    2. 范围分区:以列的值的范围来做为分区的划分条件
    3. Hash分区:通过Hash函数将数据平均分配到指定的几个分区中
    4. 间隔分区:范围分区的扩展,可以自动根据间隔创新新的分区。只能对一个number或date类型的数据进行分区,不支持索引组织表。
    5. 组合分区:通过组合上述策略进行两级分区。
      列表-列表、列表-范围、列表-Hash
      范围-范围、范围-列表、范围-Hash
      间隔-列表、间隔-范围、间隔-Hash
    6. 引用分区:在主表是分区表的情况下,与主表为有外键关联的子表数据位于和主表关联数据相同的分区中。Oracle11不支持间隔分区的引用分区,Oracle12支持。
    7. 虚拟列分区: Oracle11g起可以依据虚拟列字段值进行分区。

聚簇表Clustered table

  • 含义:一组通过公共列组织在一起并分享数据库的表
  • 特点:通过Hash进行索引,具有相同公共列值的数据储存在一起
  • 适用场景
    经常根据公共列连表查询。如查询论坛帖子及其评论。

外部表External table

  • 含义:直接加载通过扁平文件定义的表
  • 特点:只能用于查询,无法修改数据,无法建立索引
  • 适用场景
    将文件数据导入到数据表中

索引

索引数据结构分类

  • B树索引
    • 创建方式:create index name on table(field)
    • 特点:
    • 采用树结构存储,优化= > <等性能
    • 一个查询中只能使用一个B树索引(Oracle可设置更改)
  • 位图索引
    • 创建方式:create bitmap index name on table(field)
    • 特点:
      • 只能用于=、in等指定值查询
      • 当数据重复度高时使用,在数据值数量/数据行数<1%时使用。
      • 一个查询中可以同时使用多个位图索引。
      • 重建速度快,但对插入、更新、删除效率影响较大,一般常用于OLAP系统。
  • Hash索引
    用于聚簇表

分区表索引

  • 全局索引
    索引独立于分区,索引存储在一个地点,不像表一样进行分区
  • 本地分区索引
    索引自动根据数据进行分区,每个索引分区对应一个表分区
  • 全局分区索引
    将索引按照Hash或范围进行分区,索引的分区与表分区非1:1关系
全局索引和分区索引的选择
  1. 表分区列是索引的一部分,使用分区索引
  2. 索引具有唯一性,且不是在分区列中,使用全局索引
  3. 可管理性优先级高时,使用分区索引(可以快速删除、移动一个分区及其索引)
  4. 关注响应时间应优先选择全局索引,关注吞吐量优先选择分区索引(全局索引消耗资源较多,但速度较快;分区索引速度较慢,但消耗资源少)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值