zoukankan      html  css  js  c++  java
  • 海量数据库及分区2——《12年资深DBA教你Oracle开发与优化——性能优化部分》

    分区表
    组合分区
    组合分区又称为复合分区,是使用三种基本分区策略在一种分区的基础上再进行二次分区,即子分区。对于某个分区的子分区来说,其实际上是该分区数据的逻辑子集。组合分区支持历史操作,如增加新的范围分区,其同时也支持更细粒度的分区修剪。
     
     
    1.复合范围-范围分区
      复合范围-范围分区允许在两个维度的逻辑范围内分区。其语法:
     
       
     表为ACCOUNT_TRADE_CRR,方法同前。
      
    2.复合范围-散列分区
      主分区按范围分区,每个子分区按散列分区。该方式不但改进了范围分区的可管理性,同时也带来了散列分区数据的均匀化,提升了并发性能,其语法为:
     
    表为ACCOUNT_TRADE_CRH,方法同前。  参见附件脚本2
    3.复合范围-列表分区
     主分区按范围分区,每个子分区按列表分区,其语法为:
     
     
    表为ACCOUNT_TRADE_CRL,方法同前, 参见附件例子3,分区数据浏览见toad中演示。
     
    4.复合列表-范围分区
     主分区按列表分区, 每个子分区按范围 分区,其语法为:
     
    5.复合列表-散列分区
     主分区按列表分区,每个子分区按散列分区,其语法为:
     
     
    6.复合列表-列表分区
     主分区按列表分区,每个子分区也按列表分区,其语法为:
     
    本地分区索引
       本地分区索引是使用了LOCAL属性创建的分区索引,其特征是索引分区的所有键均指向其基表某个 唯一分区中存储的相应行。Oracle创建本地分区索引的目的就是要确保索引也是分区管理的,而且索引的分区与表的分区是均衡的,也就是本地分区索引具有与其基表相同的分区、子分区,即分区键等同于表的分区键、分区数等同于表的分区数。
    任何基表分区的增加、删除、合并、分割操作,或者散列分区增加或合并操作,Oracle会通过其自身的机制自动维护本地分区索引相应的分区,此即本地分区索引与基表的均衡性原则。
    如果分区列能够形成索引列的一个子集,则本地分区索引可以是唯一索引。该限制能确保具有相同索引键的行始终映射到同一个分区,在该分区中,违反唯一性的行为能被检测到。
    本地索引的优势有:
    l在基表上执行除SPLIT PARTITION或ADD PARTITION 外的维护命令仅仅只有一个分区会被影响
    l当分区表只有一个本地分区索引时,对分区进行维护操作的时间是与分区的大小成正比的
    l本地分区索引支持分区的独立性
    l只能本地分区索引支持单一分区数据的装入和卸出
    l本地索引与基表的均衡性会给Oracle执行计划带来更好的性能
    l表分区和各自的本地索引可以同时恢复
    l分区表中的位图索引必须是本地索引,非分区表上不能建立分区位图索引
    1.本地前缀索引
      本地前缀索引是指以索引列的左前缀来分区的,如果存在子分区则要求其子分区的分区键包含在索引键中。本地前缀索引可以是唯一索引,也可以是非唯一索引。
     
     
    2.本地非前缀索引
      本地非前缀索引是指没有以索引列的左前缀来分区的,或者是以索引列的左前缀来分区,但子分区的分区键不在索引键中。本地非前缀索引不可以是唯一索引,除非分区键是索引键的子集(此时是前缀索引)。
     
     
    3.语法
     
     
     
     
     
     
    4.示例
     
     
     
     
    全局分区索引
       全局分区索引是指某个特定索引分区中的键可能指向存储在基表中的多个分区或子分区中的行,其创建需要使用GLOBAL属性。无论分区表是那种类型的分区,全局索引只支持按范围和散列分区两种分区方式。
     
    全局索引往往与基表是不均衡的,如果要追求二者的均衡性,只能使用本地分区索引。全局分区的索引类型只能是b-tree索引,不能是bitmap索引。正是因为其是b-tree索引,所以无论其指向多少个分区抑或多少行,也只有一个b-tree入口,每个索引分区中会再包含指向具体表分区或子分区中的行的键。
    全局分区索引必须是前缀的,不支持非前缀的。其中,前缀的意思和本地分区索引的前缀的含义相同,即“前缀索引是指以索引列的左前缀来分区的”。
    1.语法
     
    2.示例
     
     
     
     
     
    管理全局分区索引
    l当基表分区移动和删除(TRUNCATE、DROP、MOVE、SPLIT)时,全局索引的所有分区都受影响,也不支持分区依赖
    l当基表分区或子分区恢复到某个时间点时,全局索引中所有相应入口也要恢复到相同的时间点。由于索引的分区或子分区的入口可能离散分布,其它分区或子分区混合型入口不恢复,除了重建索引之外没有办法完成
    分区索引的使用建议
    lOLTP系统中,全局索引和本地前缀索引因能减少分区探测的次数从而提供更好的性能
    lOLTP系统中,当有表分区或子分区维护操作的时候,本地索引提供更好有效性;非前缀分区索引对于历史数据库非常有用
    lDSS系统中,本地非前缀索引能提高性能,原因是依据范围的并发查询(如BETWEEN)能够并发的扫描到到更多索引分区
    l历史表的索引尽可能采用本地索引,因此历史表上会有较规律的分区删除操作,而采用本地索引能降低这类操作的影响
    l多列上的唯一索引必须是全局的,因为本地唯一非前缀索引的键要求分区键必须是索引键的子集,而此时就不是非前缀索引了而是前缀索引了
    习题
    1.什么是组合分区,其与单一分区的差别是什么?什么时候需要使用组合分区?
    2.常用的组合分区包括那六种类型,它们分别是什么?为什么没有Hash-*类型的组合分区?
    3.请对课程中6种组合分区进行逐一演练。
    4.本地分区索引的特种是什么?为什么说其与基表的分区具有均衡性,试着用第3提的例子通过SELECT语句举例说明。
    5.假设表A是复合分区,其分区基于colA,子分区基于colB,那么在colB上建立的本地分区索引是那种类型?
  • 相关阅读:
    使用curl传递cookie错误的问题
    P3P设置第三方cookie解决方案
    国内的在线编程学习网站
    十大在线编程学习网站
    CGI,FastCGI,PHP-CGI与PHP-FPM
    工具收藏
    初识docker
    PHP优化
    JS各种语法
    面试题 比较运算、去扩展名的多种方法、内存回收
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480621.html
Copyright © 2011-2022 走看看