oracle为分区表建本地索引中主键索引是该是全局还是分区索引

请问对于oracle的oracle为分区表建本地索引全局分区索引和全局不分区索引(应该就是普通索引)有什么区别?分别应该在什么情况下使用谢谢!... 请问对于oracle的oracle为分区表建本地索引,全局分区索引和全局不分区索引(应该就是普通索引)有什么区别
分别应该在什么情况下使用?谢谢!

· 知道合伙人体育行家

简单嘚说吧分区索引需要对每个分区建立相同的索引,也就是开始的工作量会稍微大点不分区索引,也就是说一个索引对全表建立就行;這样问题就出来了当你对某个分区进行drop或者新建分区的话,同时你得对不分区索引进行重建这样工作量也会变大;而分区索引当你对表进行drop分区或create分区的时候只需要在新分区建立新的索引即可。

而且索引会随着表的增大而增大所以不分区索引维护起来有点费劲,所以這个就看你自己建立的oracle为分区表建本地索引是怎么样的了是否比较容易维护索引

 
 第一种会随着表的增大而增大,越来越影响其效率但昰如果数据量在几十万的话,那就用任何一个都无所谓了
后一个,如果你想把你2011年数据清空的话那么针对每一个分区的索引也随着没叻,而且不会影响其他分区的使用所以,如果表数据量不是太大建议用第一个,比较省事省时如果分区较大,并且要定期维护的话建议用第二个了
第二种是这样吗?
我记得只有本地分区索引才能在truncate掉一个分区的情况下不影响其它分区的索引啊
全局分区的话只要截斷了就要update indexes或者rebuild索引吧?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

oracle为分区表建本地索引、分区索引囷全局索引:

全局索引就是在全表上创建索引它可以创建自己的分区,可以和oracle为分区表建本地索引的分区不一样也就是它是独立的索引。

如果想在主键的列上创建分区索引除非主键包括分区键,还有就是主键建在两个或以上列上否则不能创建。

在频繁删除表的分区苴数据更新比较频繁时为了维护方便要避免使用全局索引

主键和唯一键值列的索引

B树是指B-tree(Balanced Tree)B树的存在是为了存储设备而设计的一种多分叉的树。B树中

  1. 每个节点至多含有m个子节点
  2. 每个非叶子节点除了根节点之外至少含有?m/2?個子节点
  3. 根节点至少含有2个子节点否则它是叶子节点
  4. 有k个子节点的非叶子节点包含k-1个键值
  5. 所有叶子节点出现在同一层

其中m称为该B树的阶,一个3阶B树的节点的排列如同

【指针】键值【指针】键值【指针】

当遍历到该节点时顺次搜索键值根据大小比较去向该键值前的指针指姠的子节点还是该节点后的指针指向的。

区别在于B+树的每个索引键值对应一个子节点然后叶子节点保持对齐(Balanced)

索引组织表IOT在一个B树索引结构中存储表行的所有内容

索引组织表是一类特殊的表,它将索引和表的数据存储在一起普通表的数据以无序(Heap)的方式存放在数据庫中。而索引组织表按照主键进行排序以二叉树(B树)的方式对表的数据进行存储。索引组织表不需要列ID而是通过主键直接对表的数據进行访问。

  1. 快速随机访问:索引和表存储在一起表就是索引自身,oracle只需要索引就可以更新表
  2. 快速范围扫描:(Range)所有的数据都是按照主键进行排序的所以扫描速度非常容易接近logN
  3. 存储需求变少:索引和表存储在一起减少了索引的存储空间

和访问十分快速的位图索引一样,索引组织表的缺点在于更新表中的内容会导致大规模的索引重建因此索引组织表不是以用于频繁数据变动的表中。

类似于唯一键值约束唯一索引保证所有插入表中的非空键值都是不同的。

创建唯一索引通常与主键和唯一约束联合使用

反向键索引可以应对大量顺序插入索引的IO能够均匀的分布索引数据避免相似的键值大量的聚集在一起。

不能对位图索引或索引组织表指定REVERSE语句

反向键索引不能是降序类型

反向键索引的思路跟传统索引的思路正好相反传统的索引思路对密集型数据区域会增加索引密度以达到提升改高频访问地带搜索效率的目的。但是反向键索引思路相反 为了防止局部过热(在数据规模过大的情况向有可能高频热点数据塞满了某一块磁盘的通道导致该局部數据过热)有大量顺序数据插入导致该oracle为分区表建本地索引索引树极其不平衡的情况下,将建索引的值进行反向操作

绝对正向有序的数據在连续插入索引是,如果索引的键值方案是反向则绝对正向有序的数据退化为随机数据(不是绝对反向数据),进而我们保持了所引述的平衡性否则,索引树在大量顺序插入时极端不平衡导致一侧分支的I/O次数大量增加进而产生前文说明的局部过热问题。

减少前导列經常重复的组合索引使用COMPRESS N创建压缩索引

不能在位图索引上创建压缩索引

B树的算法中默认索引是升序索引,创建降序索引可以通过DESC关键詞反转降序

譬如,在大数值密集型的数据中降序索引速度很快

特定索引类型是专用于特定情况下的索引类型。

位图索引常用于数据仓库環境中适用于相对较低数量不同值的列。

经常使用INSERT/UPDATE/DELETE等操作的数据库不应使用位图索引因为位图索引会在DML操作期间锁定多个行

使用关键芓BITMAP创建位图索引

位图索引把某一列的所有值枚举出来后按位的方式(1/0)的方法列后,对所有值为该枚举量的列标注为1

如test表中有state这样一列10荇数据如下:

那么会建立三个位图,如下:

位图索引统计的速度很快对行列进行连贯的按位操作是非常迅速地。但是缺点是实体不应该經常改变因为所有的列与所有枚举值都有一一对应关系,经常变动的实体集对位图索引的变动范围非常大

基于定义的SQL函数或表达式创建的索引

分区索引在逻辑上是一个索引,但是在不同的段中实现能够保证很大的数据库也有良好的性能。(分区索引是oracle的付费服务)

全局分区索引不映射到基础表的段可以为常规表或oracle为分区表建本地索引建立全局分区索引,用B树实现使用GLOBAL PARTITION创建全局分区索引

本地分区索引必须建立在oracle为分区表建本地索引上,与基础表遵循相同的分区策略

oracle为分区表建本地索引刚开始让我联想到磁盘的MBRoracle为分区表建本地索引囷GPToracle为分区表建本地索引。在oracle数据库中从10支持多种oracle为分区表建本地索引oracle为分区表建本地索引类似于磁盘分区,为数据添加物理隔断oracle为分區表建本地索引之间是物理不相关联的。这样做的好处是即便某个oracle为分区表建本地索引的物理存储损坏也不会影响到其他数据

分区索引僦是在所有每个区上单独创建索引,它能自动维护在drop或truncate某个分区时不影响该索引的其他分区索引的使用,也就是索引不会失效维护起來比较方便,但是在查询性能稍微有影响

为oracle为分区表建本地索引创建分区时主键必须包含分区列,并且不能创建额外的约束原因还是粅理空间的独立隔离。

全局索引就是索引跨越oracle为分区表建本地索引,在做跨分区查询优势快;

局部索引oracle为分区表建本地索引某个分区嘚索引,速度比全局快而且维护更方便 ;

全局索引和局部索引的概念是与oracle为分区表建本地索引有关的。全局索引和局部索引的机制不同全局索引既可以分区也可以不分区,但是全局索引必须是前缀索引

索引与约束相关相当于在索引期间就依照实体集的约束进行有条件嘚判断。由于所有索引的依据都是它对应的实体集合因此实体集合的约束就是索引的约束,索引约束是对无效搜索在索引阶段进行提前判断的有效方法

局部索引一方面节约大量的磁盘IO和存储空间开支,因为只对实体集合的局部进行索引大幅度减少索引的存储量;另一方媔局部索引是对高频访问的实体区域进行有针对性的高密度索引让查找的速度尽量推进logN。

基础表构建为oracle为分区表建本地索引一方面是处於保护数据的目的将不相关的物理设计进行隔离,另一方面保持所有基础表单数据独立性映射到物理设计中的分离方法有利于对数据嘚操作逻辑规划与效能分析的对应关系建立

通过本学期的数据库学习和Oracle数据库索引技术的研究,我对数据库技术有了更加全面的认识

最開始接触到数据库是网站方面的需求,往往会选择较为流行和配置简单的mysql数据库进行数据操作使用到的功能一般也只有基础的数据库表操作,完全是当作一个性能增强的excel使用通过本学期的数据库学习我对oracle数据库包括整个数据库体系有了完整的认识,包括从抽象概念定义囷基本的物理定义都有了清晰的了解懂得了数据库的数据关系和数据操作的思想。

特别是数据库索引技术的扩展研究让我对大规模数據管理和系统假设的要点有了认识,同时应用到了课程中学到的基本数据库模型和一些磁盘相关的知识巩固了基础的Balance树算法和构造方法,同时对很多高级索引技术的思想有了认识

索引技术可以理解为对数据查询到一个预先准备。通常速度越快的索引技术对于数据实体嘚静态性要求越高,而这些索引建立时所对应的抽象层次相对较高需要一个比较坚实的数据基础,否则频繁更新实体往往伴随着大规模嘚表重建操作

我要回帖

更多关于 oracle为分区表建本地索引 的文章

 

随机推荐