• 深入理解 Oracle 分区(3):分区表和分区索引概述


        ㈠ 分区表技术概述
          
          ⑴ Range 分区
          
          ① 例子
             
             create table t
             (...列定义...)
             partition by range (week_num)
             (partition p1 values less than (4)tablespace data0,
               partition p2 values less than (5)tablespace data1,
               ....
              );
              
          ② 适用场景
             
             Range 分区一般比较适合按时间周期进行数据的存储
             
          ③ 优点
             
             用户知道具体数据落在哪个分区
             因此、通过分区可以有效实施各种大批量的数据管理操作
             比如、删除指定时间段的历史数据管理、对指定分区进行备份恢复或导入导出
             
          ④ 缺点
             
             ● 分区的数据可能不均匀
             ● Range分区与记录值相关、实施难度和可维护性相对较差
             
       
          
          ⑵ List分区
             
          ① 例子 
             
             create table t
             (...列定义...)
             partition by list(city)
             (partition p1 values ('北京') tablespace data0,
              partition p2 values ('上海') tablespace data1,
              ....
             );
             
          Range 和 List 的区别在于、前者是连续、而后者是离散
          因此、在优缺点及适用场景方面、大抵相去无几
          这里不赘述了
          
          
          ⑶ HASH 分区
          
          ① 例子
             
             create table t
             (...列的定义..)
             partition by hash (customer_no)
             partition 8 store in 
             (data0,data1);
             
             友情提醒哦:Oracle建议HASH分区数一般是2的幂
             
          ② 适用场景
             
             HASH分区适合于静态数据
             何谓静态数据?
             指此类数据一般永远存储在数据库中、不需要进行历史数据迁移
             例如:用户资料表、账户信息等
             而这类信息的访问大部分通过用户ID或者账号进行
             如果按这些字段进行HASH分区、并建立本地前缀分区索引、访问效率相当高哦
             
          ③ 优点
             
             ● 数据均匀分布
             ● 实施非常简单
             
          ④ 缺点
             

             用户不知道某条记录具体会落在哪个分区
             因此、HASH分区不适合大批量数据管理操作
             例如、历史数据清理、大批量数据导入导出等
             
          
          ⑷ 组合分区
          
          Oracle组合分区某种程度上讲是一种把优点集中的表现
          例如、大多数情况下、第一维按时间字段进行分区、
          这样在分区级适合于进行大批量数据管理操作
          第二维的HASH或List可进一步提高访问性能或者降低实施难度
          
          11g之前只有:Range-HASH 或 Range-List
          
       
       
        ㈡ 分区索引技术概述
          
          生产环境中、有时我们会遇到:
          已经做了分区表了、怎么性能没有提高啊?甚至更慢啊?
          其原因之一或者是没有合理甚至根本没有设计分区索引
          

          先总体认识一下表和索引在分区上的关系:

          

          ⑴ 本地前缀分区索引
             
          假设分区表为一个交易流水表t、且按交易日期date进行Range分区
          如果欲创建date字段上的索引、我们可以:
          create index idx_t on t (date) local;
          idx_t 就叫做本地前缀索引
          所谓本地、指索引的分区方法与对应表的分区方法一样
          所谓前缀、指分区字段是索引字段的前缀
          
         
    优势
          ● 提高查询性能
          ● 当某个分区进行drop 或 merge后、Oracle自动对所对应的索引分区进行相同的操作、
             整个本地前缀分区索引依然有效、无须rebuild
             这样大大保证了表的可用性
        
             
             
          ⑵ 本地非前缀分区索引
          
          假设我们需要在t表的area字段建立分区索引、我们可以:
          create index idx_t_area on t (area) local;
          idx_t_area就叫做本地非前缀分区索引
          
          非前缀要按照索引扫描所有的分区、性能可能更低
          不过、它能够保证按索引访问的可用性
          
          适用场景:
          如果历史数据整理非常频繁、而且不能承受全局分区索引重建的长时间带来的索引不可用
          同时、日常交易性能尚能接受、则建议设计为本地非前缀分区索引
       
       
          
          ⑶ 全局分区索引
          
          假设我们需要在t表的area字段建立分区索引、我们可以:
          create index idx_t_g_area on t(area)
          global partition by range (area)
          (partition p1 less than ...);
          所谓全局、是指该索引的分区与表的分区无关
          10g以后、Oracle提供2种全局分区索引:
          ● Global Range Partition Index 
          ● Global HASH Partition Index 
          
          缺点:
          主要体现在数据的高可用性方面
          当DROP分区后、全局分区索引则全部INVALID、除非REBULID
          但数据量越大、重建索引的时间越长
          
          

  • 相关阅读:
    Python max() 函数
    Python log10() 函数
    Python log() 函数
    Python fabs() 函数
    Java开源-astar:A 星算法
    9款超绚丽的HTML5/CSS3应用和动画特效
    Java中处理异常的9个最佳实践
    Java泛型
    Android界面性能调优手册
    正确使用Android性能分析工具——TraceView
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3036591.html
Copyright © 2020-2023  润新知