索引是与表关联的可选结构,它只是一种快速访问数据的途径,它只影响执行速度.
索引根本目地:提高查询效率
1. 合理使用索引的原则:
a) 在条件表达示中经常用到的不同值效多的列上建立索引
b) 在不同值少的列上,不要创建索引或位图索引.如:’姓别’列上只有’男’和’女’,不要在这样的列上创建索引,这样不会提高查询效率.
c) 在经常建立连接,但没有指定外键的列上建立索引
d) 在频繁进行排序和分组的列上建立索引
e) 如果排序的列有多个可以建立分组索引
f) 如果条件表达示经常对某一列应用某个函数后指定查询,可以用函数索引
2. 下列情况下建立了索引,但不会此使用索引
a) 存在数据类型隐式转换时
如:select * from emp where empno=’123’这里存在字符转换成数字,不会使用索引
b) 在建立索引的某一列上进行算术运算,不会使用索引
如:select * from emp where sal*2<1000
如果改成select * from emp where sal<1000/2这样就可以使用到索引
c) 使用’<>’不等号时,不会使用索引
d) 使用substr字符串函数时,不会使用索引
e) ‘%’通配符放在第一位时, 不会使用索引
f) 使用‘||’字符串连接符时, 不会使用索引
3. 标准索引语法
创建索引语法:
Create index 索引名
On 表名(列名1,列名2……列名N)
[tablespace 为索引指定的表空间名];
重建索引语法:
Alter index 索引名 rebuild
删除索引语法:
Drop index 索引名
4. 唯一索引
索引可以是唯一的,也可以是非唯一的.唯一索引可以确保在定义索引的列中,表的任意两行的值不相同.非唯一索引没有在列值上规定此限制,orcale自动为表的主键列创建唯一索引.
创建唯一索引语法:
Create unique index 索引名
On 表名(列名)
5. 组合索引
组合索引是在表中的多个列上创建的索引.组合索引中列的顺序是任意的,不必是表中相邻的列.如果select语句中的where子句引用了组合索引中的所有列或大多数列,则组合索引可以提高数据检索速度.创建组合索引时,应注意定义中使用的列的顺序.通常最频繁访问的列应放置在列表的最前面.
创建组合索引语法:
Create index 索引名
On 表名(列名1,列名2……列名N)
6. 反向索引
反向索引是一种特殊的索引,在索引基于含有序数的列时非常有用,如果一个标准索引基于一个含有这种数据的列,往往因为数据过于密集而降底读取性能.反向索引通过简单的反向被索引的列中的数据来解决问题,首先反向每个列键值的字节,然后在反向后的新数据上进行索引,而新数据在值的范围上分布通常比原来的有序数更均匀.因此反向键索引通常建立在一些值连续增长的列上
创建反向键索引语法:
Create index 索引名
On 表名(列名) reverse
重建反向键索引语法:
Alter index 索引名 rebuild noreverse
7. 位图索引
使用位图索引适应于低基数列,也就是列的不同值数目比表行数少的列.如果某个列的值重复了超过一百次,则可以考虑在该列上创建位图索引.位图索引不应当用在频繁发生insert update delete操作上.
创建位图索引语法:
Create bitmap index 索引名
On 表名(低基数列的列名)
8. 索引组织表
索引组织表的数据存储在与其关联的索引中,索引中存储的是行的实际数据而不是ROWID,对表的数据进行插入,更新或删除,只会导致对索引的更新.
创建索引组织表的语法:
Create table 表名
(
ID number(4) primary key,
列名 数据类型
)organization index
普通表与索引表的比较
普通表 索引表
ROWID唯一的标识行 主键唯一的标识行
隐式的ROWID列 没有隐式的ROWID列
基于ROWID访问 基于主键访问
顺序扫描返回所有的行 完全索引扫描返回所有的行,并按主键顺序排列
支持分区 不支持分区
9. 获取索引信息
USER_INDEXS 查询此表可获取有关当前用户已创建的索引的详细信息
USER_IND_PARTITIONS 查询此表可获取有关用户已创建的分区索引的详细信息
USER_IND_COLUMNS 查询此表可获取有关列(用记的索引是基于这些列创建的)的详细信息
例如:
Select INDEX_NAME(索引名),TABLE_NAME(与索引相关的表名),COLUMN_NAME(建有索引的某一列) from USER_IND_COLUMNS
10. 基于函数的索引
有时可能要在某一列上常用到某一函数,可以通过建立函数索引来提高查询效率,但不能在聚合函数上建立索引.不能在LOB类型蝗列,REF类型的列或包含LOB或REF对象类型上创建函数索引.
创建函数索引语法:
Create index 索引名 on 表名 (函数名(参数));
创建表达示索引语法:
Create index 索引名 on 表名 (表达示);
分享到:
相关推荐
oracle的索引学习,oracle的索引学习,oracle的索引学习
oracle的索引初步学习.doc
oracle 基本索引原理,oracle 学习真必不可少的资料。
Oracle学习笔记(索引),有具体的代码案例,创建索引,删除索引,重建索引等等
Oracle索引的创建、简介、技巧,希望可以给学习Oracle的人带来帮助!
Oracle索引详解,索引的初步学习,从无到有。全文分为:索引的概念,创建、删除、修改索引。
ORacle、索引、数据优化学习文档,还有一些Arcgis的学习
oracle索引整理,这是我辛苦整理的哦,希望对大家有帮助
这是我学习oracle后的学习总结,里面很多东西还是很有用的,时候刚学习oracle 的人
深入学习分区表及分区索引(详解oracle分区).docx
oracle 索引学习,包括如何创建索引,如何利用索引来优化数据库,使数据库更加快. 是菜鸟学习的好书
主要给大家介绍了关于Oracle Index索引无效的原因与解决方法,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
全面学习分区表及分区索引-Oracle.pdf
这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...
培训教程之Oracle索引详解PPT教案学习.pptx
2. Oracle中的伪列 51 3. Oracle函数 54 4. 本章总结 62 5. 本章练习 63 表空间、数据库对象 66 1. Oracle数据库对象 67 2. 同义词 67 3. 序列 70 4. 视图 72 5. 索引 74 6. 表空间 75 7. 本章总结 79 8. 本章练习 ...
oracle数据库分区及索引的使用
4. Select 中 避免使用*, oracle需要转换成表的列,通过查询数据字典获得,耗费时间). 5. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序尽可能的让字段顺序与索引顺序...
主要给大家介绍了关于Oracle使用强制索引的方法与注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。