首页 > 数据库 >50.Oracle的索引

50.Oracle的索引

时间:2023-01-02 22:23:32浏览次数:50  
标签:index Tree 50 Bitmap 索引 键值 Oracle scott

Oracle的索引主要有三种索引:

  • B树索引(B-Tree index)
  • 位图索引(Bitmap index)
  • 全文索引(Text index)

1. B树索引:Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况

1.1 B树索引特点: 

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

1.2 应用场景

  - OLTP

      - 主键或者唯一性性约束

      - 键值重复率低的字段比较合适使用B树索引 

1.3 索引创建语法:

create [unique | bitmap] index [schema.] 索引名
on [schema.] 表名 (列名1, .., 列名N);

1.4 示例:

1. 创建 '一般索引'('B-Tree' 索引)
   create index scott.idx_si_sname on scott.student_info(sname);
   create index scott.idx_si_sname_age on scott.student_info(sname, sex);
2. 创建 '位图索引'
   create bitmap index scott.bidx_si_sex on scott.student_info(sex);

1.5 B树索引的工作流程

是一种类似平衡二叉树的结构,感觉和mysql的b+树索引很像,叶子结点都是从左到右依次递增

2.位图索引(Bitmap index):适合OLAP场景

  我们目前大量使用的索引一般主要是B*Tree索引,在索引结构中存储着键值和键值的RowID,并且是一一对应的,而位图索引主要针对大量相同值的列而创建(例如:类别,操作员,部门ID,库房ID等),索引块的一个索引行中存储键值和起止Rowid,以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无.一个位图索引块可能指向的是几十甚至成百上千行数据的位置.

这种方式存储数据,相对于B*Tree索引,占用的空间非常小,创建和使用非常快.

当根据键值查询时,可以根据起始Rowid和位图状态,快速定位数据.
当根据键值做and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,快速得出结果行数据.
当select count(XX) 时,可以直接访问索引就快速得出统计数据.

2.1 位图索引特点

  1.Bitmap索引的存储空间,相对于B*Tree索引,位图索引由于只存储键值的起止Rowid和位图,占用的空间非常少.

  bitmap的空间占用主要根以下4个因素相关:
    a.表的总记录数
    b.索引列的键值多少,列的不同值越少,所需的位图就越少.

  2.Bitmap索引创建的速度

   位图索引创建时不需要排序,并且按位存储,所需的空间也少.

   B*Tree索引则在创建时需要排序,定位等操作,速度要慢得多

  3.Bitmap索引允许键值为空

     B*Tree索引由于不记录空值,当基于is null的查询时,会使用全表扫描,而对位图索引列进行is null查询时,则可以使用索引.

     4.Bitmap索引对表记录的高效访问

    当使用count(XX),可以直接访问索引就快速得出统计数据.
    当根据位图索引的列进行and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,在访问数据之前可事先过滤数据

  5.Bitmap索引对批量DML操作只需进行一次索引
    由于通过位图反映数据情况,批量操作时对索引的更新速度比B*Tree索引一行一行的处理快得多

  6.Bitmap索引的锁机制

  对于B*Tree索引,insert操作不会锁定其它会话的DML操作.而位图索引,由于用位图反映数据,不同会话更新相同键值的同一位图段,insert、update、delete相互操作都会发锁定,这就是位图所以不适oltp的原因之一(还有一个原因就是位图所以的选择性不强不适做数据查询)。

3.全文索引(这个下次再写。。。)

 

标签:index,Tree,50,Bitmap,索引,键值,Oracle,scott
From: https://www.cnblogs.com/zmc60/p/17020716.html

相关文章

  • 暑假在富士康打工 50 天后,我决定奋发图强
    的小伙伴们大家好,我是二哥呀。相信很多小伙伴都有暑期打工的经历,今天就来给大家分享一个二哥编程星球里一个球友在富士康打工50天的感受,相信大家看完后会深深触动的。坦......
  • 1.2复习了一下MySQL的索引
    今天又复习了一下索引,做一个总结吧主要就是复习了索引分类概念,索引使用,SQL优化等三个方面1.主键索引,唯一索引,常规索引;对于唯一索引,同一个表中可以创建多个,用作创建唯一......
  • MySQL中的索引应用
    1.什么是索引(Index)?官方的定义是索引是一种数据结构,从生活的纬度上讲,假如将一本书比作成一张表,这本书的目录就是表中的索引(Index)。2.索引的优势和劣势?优势:数据量比较大......
  • shodan 黑暗搜索引擎
    shodan介绍服务器上的扫描器24小时在扫描网络设备安装配置安装pipinstallshodan初始化shodaninitapi获取api淘宝买永久会员初级15,高级35查看是否是会员......
  • Windows 恶意软件数量是 Mac 的 5000 倍,是 Linux 的 36 倍
    AV-TEST是一个独立的测试机构,他们会根据各种标准对操作系统的防病毒和安全软件进行评估和评级,并将测试结果免费提供给用户,帮助用户选择最适合自己的产品。近日,AV-TEST联......
  • 49.Oracle的分区
    Oracle的分区Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。对表中数据的查询、表的备份......
  • SQL注入之Oracle,mongoDB等注入
    常见数据库:access、mysql、mssql、MongoDB、postgresql、sqlite、oracle、sybase等Access是没有库之分,比其他数据库低一个等级。目前在市面上的access已经很少了,和asp语言......
  • 50matplotlib
    importmatplotlib.pyplotasplt#plt.plot([1,2,3,4,5],[3,1,5,6,9],'ro')#plt.show()#x=range(1,15)#y=range(1,42,3)#plt.plot(x,y,color='y')#......
  • 【macOS】“聚焦”使用大量能耗解决方案(重建“聚焦”索引)
    ✨“聚焦”使用大量能耗现象描述:每次开机后或者是其他时间,使用大量能耗中经常出现“聚焦”打开活动监视器可以发现:“聚焦“对能耗影响极大并且可以发现有一个名为......
  • Windows 恶意软件数量是 Mac 的 5000 倍,是 Linux 的 36 倍
    Windows恶意软件数量是Mac的5000倍,是Linux的36倍来源:OSCHINA编辑: Alias_Travis2023-01-0108:42:00 3AV-TEST是一个独立的测试机构,他们会根......