导读:
1、基本概念-索引原理图
2、使用索引时需要注意
3、索引的特性
4、索引的扫描方式
5、索引的类型及特点
6、快速重建索引

1、索引的基本概念:

索引的原理图:

(1)创建索引的目的:

以索引小的IO换取表的大IO。

何时创建索引:

当访问的数据块少于表中20%的数据时,建议使用索引。

(2)索引的副作用

会使insert、delete速度变慢(索引个数多的话速度就会慢)。

对于update语句,需要先判断是否要修改索引列。

(3)单字段索引和组合索引

在Oracle9i之前,只有使用到索引的前导引用时才可以使用组合索引。

现在可以通过索引的跳跃式扫描来使用非前导引用的组合索引。

(4)Oracle的rowid

rowid是直接指向单行的线路图,不同的版本rowid的结构不同,不能对rowid进行硬编码。

具体可看上面的原理图。

2、使用索引时需要注意

(1)条件中使用不等于操作(<>,!=),将不会走索引,而是走全表扫描。

(2)条件中使用IS NULL 或者IS NOT NULL,也不会走索引,走全表扫描。字段可以使用缺省值。

(3)条件中对字段使用函数,也不会走索引,除非是函数索引。

(4)比较不匹配的数据类型时,oracle可以帮我们自动做数据类型的转换,但是oracle还是建议我们最好

使用转换函数(to_char()、to_date()、to_number()等)做显示的转换。

3、索引的选择性

(1)选择性越高,索引返回的数据就越少。

(2)索引的群集因子越高,表中的数据按照这个索引字段越有序,表中返回的数据块就越少。

(3)索引的二元高度的每个级别需要单独的io,如果索引中被删除的行接近20~30%,需要重建索引。

降低二元高度;数据库快的尺寸越大,索引的二元高度就越小。

(4)索引的空间

索引的空间被重复利用的概率很小,有时索引的空间比表大。

4、索引的扫描方式

(1)全局快速扫描索引(fast full scan):

使用hint提示中的INDEX_FFS。索引相对于表的总体大小来说很小。如果在连接中只查询索引的

连接键列时,通常都会执行快速全索引扫描。

(2)跳跃式扫描索引(skip scan):

允许优化器使用组合索引,即使索引的前导列没有出现在where子句里面。比全索引扫描要快得多。

(3)索引的全局扫描(full scan);

(4)索引的范围扫描(range scan)。

5、索引的类型及特点

(1)B——索引

如果索引的值都在索引中,就可以不访问表,从而减少IO量。

(2)位图索引

适用于DSS系统,他使用较少基数(唯一键数目)列访问非常大的表。

B-树索引和位图索引的比较:

B-树索引的索引值中包含rowid,这样oracle就可以在行级别上锁定索引。

位图索引被存储为压缩的索引值,其中包含一个范围的rowid,因此oracle必须针对一个给定值锁

定所有范围内的rowid。这种锁定可能在某些dml语句中造成死锁。

位图索引的限制:

a、基于代价的优化

b、当执行alter table 语句,并修改包含位图索引的列时,位图索引会失效。

c、不能用于任何类型的完整性检查。

d、不能被声明为唯一索引。

注意:不要在繁重的oltp环境中使用位图索引。

 创建位图索引

 create bitmap index emp_sex on employees(sex)tablespace users;     

(3)Hash 索引

使用hash 索引必须使用hash群集。

(4)索引编排表

又称为索引组织表,只有索引段,没有数据段。

(5)反转键索引

数据1234就被存储为4321。不能对位图索引和索引编排表进行反转键处理。

此类型的索引可能比b-索引要慢2.5~3倍。

一般适用于磁盘数很少而插入很多的情况。

 创建反序索引 

 create unique index order_reinx on orders(order_num,order_date)tablespace users reverse;

(6)基于函数的索引

数据库的参数:QUERY_REWRITE_ENABLED = TRUE

创建函数索引(函数索引即可以是普通的B树索引,也可以是位图索引)

 create index emp_substr_empno on employees(substr(empno,1,2)) tablespace users;

(7)分区索引

本地索引:有前缀和无前缀。

全局索引:有前缀和无前缀。

6、索引的快速重建

锁表的情况

 alter index index_name rebuild; 

不锁表的情况

 alter index indx_name rebuild online;     

注:

 B树索引:在B树的叶节点中存储索引字段的值与ROWID。

 唯一索引和不唯一索引都只是针对B树索引而言

 复合索引:Oracle最多允许包含32个字段的复合索引。

Oracle之SQL优化-索引的基本原理(一)相关推荐

  1. 基于oracle的sql优化

    [基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...

  2. 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)

    本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...

  3. oracle数据库sql优化

    oracle数据库sql优化 1.select子句中不要使用 * ,这会使数据字典消耗一些资源. 2.尽量定义表的别名使用别名前缀于列做关联,减小解析时间,避免错误. 3. ⽤>=替代> ...

  4. 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析

    2013数据库大会:崔华-基于Oracle的SQL优化案例分析 崔华的新书即将出版,其数据库大会上的演讲也非常精彩,他的新书十分值得期待. 2013年中国数据库技术大会第二天的"Oracle ...

  5. 超详细图解!【MySQL进阶篇】SQL优化-索引-存储引擎

    1. Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理 ...

  6. oracle查询sql走索引吗,Oracle SQL不走索引小记

    sql执行计划不走索引 一.优化器认为走全表扫描更优. 在这种情况下,需要重新分析一遍表,更新表的状态,有助于优化器分析出正确的执行计划. analyze table tablename comput ...

  7. 读书笔记-《基于Oracle的SQL优化》-第二章-1

    第二章:Oracle里的执行计划 2.1 什么是执行计划 Oracle用来执行目标SQL语句的这些步骤的组合就被称为执行计划. 执行计划可以分为如下三个部分: 1.目标SQL的正文.SQL ID和其执 ...

  8. ORACLE-019:ORACLE常用SQL优化hint语句

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  9. 基于Oracle的SQL优化(崔华著)-学习笔记

    201704171025 01. 列rows记录的就是执行计划中每一个执行步骤所对应的Cardinality的值 列Cost(%CPU)记录的就是执行计划中的每一个执行步骤对应的成本 02. Comp ...

最新文章

  1. 4che3 scu发送超时设置_Redis实现订阅发布与批量发送短信
  2. 无序数组求第k大的数 python_整数无序数组求第K大数
  3. TSC工业型条码打印机的价格的影响因素有哪些呢?
  4. ajax实例详解(2)
  5. 第九届蓝桥杯B组省赛。
  6. 局域网计算机共享文件夹点不开,局域网共享文件夹打不开的解决方法
  7. python 经典图书排行榜_计算机优秀书籍每周销售排行榜
  8. mac 电脑 java wifi密码尝试器
  9. CASE WHEN THEN 判断
  10. C语言可变参数va_list
  11. IDEA怎么查看现在的项目使用的JDK版本? 2016年4月19日22:51
  12. 燕千云 YQCloud 数智化业务服务管理平台发布1.11版本
  13. 计算机水平二级指什么,全国计算机二级是什么
  14. cloudreve安装linux教程,Cloudreve云盘系统小白超详细图文安装教程
  15. 关键词文章自动生成的四大要点
  16. 设计师2022面试UI作品集PSD样机模板
  17. PDApp.log占用C盘几十G空间,原因及解决方案
  18. 计算机网络的分类2:按网络覆盖范围分类,分为局域网、城域网、广域网
  19. 每天坚持慢跑30分钟,一个月身体会有什么变化?
  20. PHP设计模式(二):工厂方法模式

热门文章

  1. php怎么制作勾选列表,web列表设置勾选状态
  2. hdu2202 凸包+旋转卡壳
  3. 解决小新pro13打开软件后软件字体太小问题
  4. 模拟器安装xposed框架
  5. 【Java基础】多态
  6. 计算机路由器工作原理,什么是路由器 路由器工作原理与应用知识
  7. Dell服务器系统升级,更改引导方式(以戴尔R720为例)
  8. Linux实战教学笔记36:PHP服务缓存加速深度优化实践
  9. 【渝粤教育】国家开放大学2018年春季 4972T农业项目投资 参考试题
  10. 数据分享 | 中国第二次冰川编目