Oracle索引使用规则

发表于:2010-1-27 10:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
Oracle

  逻辑上:

  Single column 单行索引
  Concatenated 多行索引
  Unique 唯一索引
  NonUnique 非唯一索引
  Function-based函数索引
  Domain 域索引

  物理上:

  Partitioned 分区索引
  NonPartitioned 非分区索引
  B-tree:
  Normal 正常型B树
  Rever Key 反转型B树
  Bitmap 位图索引

  索引结构:

  B-tree:

  适合与大量的增、删、改(OLTP);
  不能用包含OR操作符的查询;
  适合高基数的列(唯一值多)
  典型的树状结构;
  每个结点都是数据块;
  大多都是物理上一层、两层或三层不定,逻辑上三层;
  叶子块数据是排序的,从左向右递增;
  在分支块和根块中放的是索引的范围;

  Bitmap:

  适合与决策支持系统;
  做UPDATE代价非常高;
  非常适合OR操作符的查询;
  基数比较少的时候才能建位图索引;
  树型结构:

  索引头

  开始ROWID,结束ROWID(先列出索引的最大范围)

  BITMAP

  每一个BIT对应着一个ROWID,它的值是1还是0,如果是1,表示着BIT对应的ROWID有值;

  B*tree索引的话通常在访问小数据量的情况下比较适用,比如你访问不超过表中数据的5%,当然这只是个相对的比率,适用于一般的情况。bitmap的话在数据仓库中使用较多,用于低基数列,比如性别之类重复值很多的字段,基数越小越好。

  B* 树索引

  这些是我所说的“传统”索引。到目前为止,这是 Oracle 和大多数其他数据库中最常用的索引。 B* 树的构造类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就能找到正确的行。不过,需要注意重要的一点,“B* 树”中的"B"不代表二叉( binary ),而代表平衡(balanced)。B* 树索引并不是一颗二叉树,这一点在介绍如何在磁盘上物理地存储 B* 树时就会了解到。 B* 树索引有以下子类型:

  索引组织表(index organized table):索引组织表以 B* 树结构存储。堆表的数据行是以一种无组织的方式存储的(只要有可用的空间,就可以放数据),而 IOT 与之不同, IOT 中的数据要按主键的顺序存储和排序。对应用来说, IOT 表现得与“常规”表并无二致;需要使用 SQL 来正确地访问 IOT 。 IOT 对信息获取、空间系统和 OLAP 应用最为有用。 IOT 在上一章已经详细地讨论过。

  B*树聚簇索引( B*tree cluster index )这些是传统 B* 树索引的一个变体(只是稍有变化)。 B* 树聚簇索引用于对聚簇键建立索引,这一章不再讨论。在传统 B* 树中 ,键都指向一行;而 B* 树聚簇不同,一个聚簇键会指向一个块,其中包含与这个聚簇键相关的多行。

  降序索引( descending index ):降序索引允许数据在索引结构中按 “ 从大到小”的顺序(降序)排序,而不是按“从小到大”的顺序(升序)排序。我们会解释为什么降序索引很重要,并说明降序索引如何工作

  反向键索引( reverse key index ):这也是 B* 树索引,只不过键中的字节会 “反转” 。利用反向键索引,如果索引中填充的是递增的值,索引条目在索引中可以得到更均匀的分布。例如,如果使用一个序列来生成主键,这个序列将生成诸如 987500 、 987501 、 987502 等值。这些值是顺序的,所以倘若使用一 个传统的 B* 树索引,这些值就可能放在同一个右侧块上,这就加剧了对这一块的竞争。利用反向键, Oracl e则会逻辑地对 205789 、 105789 、 005789 等建立索引。 Oracle 将数据放在索引中之前,将先 把所存储数据的字节反转,这样原来可能在索引中相邻放置的值在字节反转之后就会相距很远。通过反转字节,对索引的插入就会分布到多个块上。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号