凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1156316
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3760
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

about me:oracle ace pro,optimistic,passionate and harmonious. focus on oracle,mysql and other database programming,peformance tuning,db design, j2ee,linux/aix,architecture tech,etc

文章分类

全部博文(166)

文章存档

2024年(21)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: oracle

2020-07-23 17:06:09

使用oracle index提高性能-凯发app官方网站

1)了解b*tree、bitmap、iot等索引类型特点和使用。
2)了解索引的扫描方式以及走不了索引的情况等。
3)索引在分页查询中的应用。

1)b*tree索引:默认的索引类型,最常使用

   -index-organized tables索引组织表:相对于堆表的无序,iot按照主键排序,索引即是表,
     表即是索引。
    -reverse key indexes反转键索引:按照字节反转存储的索引,可解决索引块争用问题
    -descending indexes降序索引:按照键值降序存储的索引,默认升序
    -b-tree cluster indexes聚簇索引:专门为cluster定义的索引,很少使用

2)-bitmap和bitmap join indexes:位图索引和b*tree不同,位图索引的一个index entry使用bitmap指向多行,而b*tree一个index entry指向单行。bitmap  join indexes是针对多张表的join建立的索引,避免实际join,从而提高效率。位图索引适合olap场景,索引列值的选择性不好,数据只读或者很少做dml操作。

3)-function-based indexes:函数索引,可以是b*tree或bitmap,基于表达式或函数运算创建的索引。


4)-partition indexes:分区索引,利用分区技术建立的索引,提高效率,便于维护。


5)-application domain indexes:应用域索引是用户针对应用定制的索引,比如全文索引。



  每个b *树索引都有根块作为起始点。 根据条目的数量,有多个分支块可以有多个叶块。 叶块包含索引的所有值加上指向相关数据段中的行的rowid。

  上一个和下一个块指针连接叶块,以便它们可以从左到右遍历(反之亦然)。索引始终是平衡的,它们从上到下增长。 在某些情况下,平衡算法会导致b *树的高度不必要地增加。 可以重组索引。 这是由alter index ... rebuild |完成的 coalesce命令。

  b *树索引的内部结构允许快速访问索引值。 系统可以在从索引叶块中检索到地址(rowid)后直接访问行。


 1)b*tree有两种类型的block:branch blocks用于搜索、leaf blocks存储数据,其中最上面的root branch。
 2)branch blocks在两个键值之间通过最小化的前缀存储,通过指针指向子块。比如根块条目0..40指向对应分支块,它包含0..10和11..19两个条目,这两个条目通过指针指向对应的leaf block。
 3)从root branch到每个leaf block的高度是一致的。
 4)leaf blocks按照索引列顺序加上rowid存储(key value,rowid),用于定位对应的行。leaf blocks之间是双向链表结构。索引的有序性特点,经常用于避免sql语句中的排序。
 5)b*tree不存储全为null的行。






1)oracle针对低基数的列,可以创建位图索引来提高效率,针对每个键值创建位图。
2)位图索引可节省存储空间,对于count,and,or等之类的运算,充分利用位图的高效运算特点。
3)位图索引,一个index entry指向多行,这样在使用中,如果更新对应的位图(insert,update,delete)会对位图索引段加锁,这也是位图索引不适合oltp的原因。
4)位图索引可存储全为null的行。




1)在oltp环境下,基本用的都是b*tree,针对选择性好的列创建b*tree来提高效率,并且做dml操作,针对指定的行加行级锁,效率比bitmap好,当然它的缺点是不存储全为null的行,并且存储要求比bitmap多,另外没有位图的与,或之类的高效运算,oracle优化器目前可将普通索引转为bitmap and、bitmap or运算。
2)位图索引一般的基数比较少,做统计时使用,加的是bitmap segment level locking,锁的行多,适合olap环境,数据加载完后一般只读,多维统计效率高。

接part2:http://blog.chinaunix.net/uid-7655508-id-5837972.html
阅读(2781) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:使用oracle index提高性能_part2

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图