索引的说明

索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表的数据,索引能优化查询,不能优化DML操作,Oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护。

如果SQL语句仅访问被索引的列,那么数据库只需从索引中读取数据,而不用读取表。

如果该语句同时还要访问除索引列之外的列,那么,数据库会使用rowid来查找表中的行。

通常,为检索表数据,数据库以交替方式先读取索引块,然后读取相应的表块。

索引的目的

主要是减少IO,这是本质,这样才能体现索引的效率。

1大表,返回的行数<5%

2经常使用where子句查询的列

3离散度高的列

4更新键值代价低

5逻辑AND、OR效率高

6查看索引在建在那表、列:

select * from user_indexes;

select * from user_ind_columns;

索引结构

oracle索引分为两大类结构:

B树索引结构

类似于字典查询,最后到leaf block ,存的是数据rowid和数据项

1.叶块之间使用双向链连接,为了可以范围查询。

2.删除表行时,索引叶块也会更新,但只是逻辑更改,并不做物理的删除叶块。

3.索引叶块不保存表行键值null的信息。

位图索引结构

在oracle中是根据rowid来定位记录的,因此,我们需要引入start rowid和end rowid,通过start rowid ,end rowid 和二进制位的偏移,我们就可以非常快速的计算出二进制位所代表的表记录rowid。位图索引的最终逻辑结构如下图:

我们称每一单元的为一个位图片段。当我们修改某一行数据的时候,我们需要锁定该行列值所对应的位图片段,如果我们进行的是更新操作,同时还会锁定更新后新值所在的位图片段。例如我们将列值从01修改为03,就需要同时锁定01和03位图片段,此时如果有其他用户需要修改与01或者03关联的表记录上的索引字段,就会被阻塞,因此位图索引不适合并发环境,在并发环境下可能会造成大量事务的阻塞。

我们一般在表数据离散度比较低的时候使用位图索引,如t_doctor的empno值重复分布的比较多,则离散度比较低:create bitmap index job_bitmap on t_doctor(empno)

建立索引的方式

1.唯一索引:键值不重复

create unique index doctor_index on t_doctor(empno)

drop indexdoctor_index

2.一般索引:键值可重复

create index doctor_index on t_doctor(empno)

drop indexdoctor_index

3.复合索引:绑定了多个列

create index doctor_index ont_doctor(empno,job)

drop indexdoctor_index

4.反向索引:为避免平衡树索引热块,如t_doctor表中empno开头都是“7”,这样构建索引树的时候,很可能会把所有数据分配到一个块里,使用反向索引,避免此类问题,使索引树分布均匀

create index doctor_index ont_doctor(empno) reverse

drop indexdoctor_index

5.函数索引:查询时必须用到这个函数,才会使用到

create index func_index ont_doctor(lower(empno))

--select * from t_doctor where lower(empno) = 'lina'

drop indexfunc_index

6.压缩索引:不常用

create index doctor_index ont_doctor(empno) compress

drop indexdoctor_index

7.升序降序索引:

create index doctor_index ont_doctor(empno desc, job asc)

drop indexdoctor_index

索引碎片问题

由于对基表做DML操作,导致索引表块的自动更改操作,尤其是基表的delete操作会引起index表的index_entries的逻辑删除,注意只有当一个索引块中的全部index_entry都被删除了,才会把这个索引块删除,索引对基表的delete、insert操作都会产生索引碎片问题。

在Oracle文档里并没有清晰的给出索引碎片的量化标准,Oracle建议通过Segment Advisor(段顾问)解决表和索引的碎片问题,如果你想自行解决,可以通过查看index_stats视图,当以下三种情形之一发生时,说明积累的碎片应该整理了(仅供参考)。

查看执行计划:set autotrace traceonly explain;

分析索引列:

analyze index ind_1 validate structure;

select name,HEIGHT,PCT_USED,DEL_LF_ROWS/LF_ROWS from index_stats;

HEIGHT >=4

PCT_USED< 50%

DEL_LF_ROWS/LF_ROWS>0.2

alter index ind_1 rebuild [online] [tablespace name];

到此这篇关于oracle数据库关于索引建立及使用的详细介绍的文章就介绍到这了,更多相关oracle数据库索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

定时创建oracle索引,oracle数据库关于索引建立及使用的详细介绍相关推荐

  1. rds mysql 视图 索引_数据库 视图 索引

    SQL2K数据库开发二十二之索引操作在视图上创建索引 1.在企业管理器中,右击要创建索引的视图,在弹出的菜单中选择"设计视图"命令进入视图设计器. 2.在视图设计器中显示了视图所包 ...

  2. mysql索引和稠密索引_数据库稠密索引与稀疏索引

    一.稠密索引 如果记录是排好序的,我们就可以在记录上建立稠密索引,它是这样一系列存储块:块中只存放记录的键以及指向记录本身的指针,指针就是一个指向记录或存储块地址.稠密索引文件中的索引块保持键的顺序与 ...

  3. mysql特殊字段名称_Mysql必读MySQL创建带特殊字符的数据库名称方法示例

    <MysqL必读MysqL创建带特殊字符的数据库名称方法示例>要点: 本文介绍了MysqL必读MysqL创建带特殊字符的数据库名称方法示例,希望对您有用.如果有疑问,可以联系我们. 文章抓 ...

  4. mysql 数据库名称 特殊字符_Mysql必读MySQL创建带特殊字符的数据库名称方法示例...

    <Mysql必读MySQL创建带特殊字符的数据库名称方法示例>要点: 本文介绍了Mysql必读MySQL创建带特殊字符的数据库名称方法示例,希望对您有用.如果有疑问,可以联系我们. MYS ...

  5. 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)

    源地址:http://doc.chinaunix.net/python/200703/202210.shtml 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式 ...

  6. oracle创建表联合索引,Oracle创建索引的基本规则

    创建索引的基本规则 一.B-Tree索引 1. 选择索引字段的原则: 在WHERE子句中最频繁使用的字段 联接语句中的联接字段 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很 ...

  7. oracle 强制索引_当唯一索引遇见分布式数据库

    这是Tank的第18篇文章 1 关于分片键 分布式数据库通过将表的数据打散,按一定规则将数据分布在多个独立的主机上,常见的策略如HASH.RANGE.LIST等分布方式.不考虑中间件的解决方案,在原生 ...

  8. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  9. oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...

    创建与管理Oracle分区表和本地索引的相关知识是本文我们主要要介绍的内容,我们知道,Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业 ...

最新文章

  1. pcm 采样率转换_44.1KHz够用吗?我们是否需要更高的采样率?
  2. 基于ArcSDE、Oralce空间数据库冷备份与恢复
  3. 龙蜥社区成立系统运维SIG,开源sysAK系统运维工具集
  4. 「小程序JAVA实战」 小程序的事件(11)
  5. 显示表格数据网页php源码,网页上可以复制的表格数据,为什么察看源代码找不到这些数据?_html/css_WEB-ITnose...
  6. Hive什么时候可以用别名?
  7. poj3263 Tallest Cow 题解报告
  8. 项目管理十大知识领域和五大过程
  9. 《麦肯锡卓越工作方法》读后感
  10. html代码简单的保护环境网页代码 学生环保主题网页制作代码 简单的垃圾分类网页制作作业 简单的环境保护网页制作源码
  11. flash传值php乱码,Flash中出现中文乱码的解决办法,网页模板帮助中心
  12. java实现数据结构基数排序_数据结构与算法——基数排序简单Java实现
  13. 链路聚合(eth-trunk)
  14. A + B Proble
  15. Patchwork++论文阅读——基于3D点云的快速鲁棒地面分割算法
  16. Android群英传读书笔记——第十二章:Android 5.X新特性详解
  17. 基石为勤能补拙的迷宫之旅——客户端/服务器架构,OSI模型
  18. 基于springboot微信小程序点餐系统的设计与实现
  19. ItemCreated和ItemDataBound事件的区别
  20. matlab 浮点数有效位,matlab浮点数精度

热门文章

  1. java反射头文件_编程基础知识——C++能不能支持Java和ObjC的反射?
  2. 如何动态的向数组中插入键值对_在Java中实现的一个简单“HashMap”
  3. android 置顶窗口位置,Android 滑动悬浮置顶指南
  4. linux git指令不存在,一些常用的Git命令
  5. linux系统 qt调试,Linux下Qt Creator远程调试(redhat5+mini6410)
  6. python使用xml布局界面_Python:使用ElementTree更新XML文件,同时尽可能地保留布局...
  7. html input日期值,input标签设置时间值
  8. 【原】postman常用设置全局变量的js片段
  9. AJAX:校验用户名是否被注册
  10. 前端基础之操作标签—文档处理