`
yupengcc
  • 浏览: 131996 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Oracle索引总结

阅读更多

索引简介

1、索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息

2、索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率

3、索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表

4、索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),Oracle会自动管理索引,索引删除,不会对表产生影响

5、索引对用户是透明的,无论表上是否有索引,SQL语句的用法不变

6、Oracle创建主键时会自动在该列上创建索引

索引原理

1、若没有索引,搜索某个记录时(例如查找name=’wish’)需要搜索所有的记录,因为不能保证只有一个wish,必须全部搜索一遍

2、若在name上建立索引,Oracle会对全表进行一次搜索,将每条记录的name值哪找升序排列,然后构建索引条目(name和rowid),存储到索引段中,查询name为wish时即可直接查找对应地方

3、创建了索引并不一定就会使用,Oracle自动统计表的信息后,决定是否使用索引,表中数据很少时使用全表扫描速度已经很快,没有必要使用索引

索引使用(创建、修改、删除、查看)

1、创建索引语法

CREATE [UNIQUE] | [BITMAP] INDEX index_name --unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2   --bitmap,创建位图索引
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1]                                --指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)]
[NOLOGGING]                                 --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE]
[NOSORT];                                   --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引排列的可以使用

2、修改索引

1)重命名索引

alter index index_sno rename to bitmap_index;

2)合并索引(表使用一段时间后在索引中会产生碎片,此时索引效率会降低,可以选择重建索引或者合并索引,合并索引方式更好些,无需额外存储空间,代价较低)

alter index index_sno coalesce;

3)重建索引

方式一:删除原来的索引,重新建立索引

方式二:

alter index index_sno rebuild;

3、删除索引

drop index index_sno;

4、查看索引

select index_name,index-type, tablespace_name, uniqueness from all_indexes where table_name ='tablename';

-- eg:    
create index index_sno on student('name');
select * from all_indexes where table_name='student';

索引分类

1、B树索引(默认索引,保存讲过排序过的索引列和对应的rowid值)

1)说明:

1、Oracle中最常用的索引;B树索引就是一颗二叉树;叶子节点(双向链表)包含索引列和指向表中每个匹配行的ROWID值

2、所有叶子节点具有相同的深度,因而不管查询条件怎样,查询速度基本相同

3、能够适应精确查询、模糊查询和比较查询

2)分类:

UNIQUE,NON-UNIQUE(默认),REVERSE KEY(数据列中的数据是反向存储的)

3)创建例子

craete index index_sno on student('sno');

4)适合使用场景:

列基数(列不重复值的个数)大时适合使用B数索引

2、位图索引

1)说明:

  1、创建位图索引时,Oracle会扫描整张表,并为索引列的每个取值建立一个位图(位图中,对表中每一行使用一位(bit,0或者1)来标识该行是否包含该位图的索引列的取值,如果为1,表示对应的rowid所在的记录包含该位图索引列值),最后通过位图索引中的映射函数完成位到行的ROWID的转换

2)创建例子:

create bitmap index index_sno on student(sno);

3)适合场景:

对于基数小的列适合简历位图索引(例如性别等)

3、单列索引和复合索引(基于多个列创建)

注意:即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引,即至少要包含组合索引的第一列

4、函数索引

1)说明:

1、当经常要访问一些函数或者表达式时,可以将其存储在索引中,这样下次访问时,该值已经计算出来了,可以加快查询速度

2、函数索引既可以使用B数索引,也可以使用位图索引;当函数结果不确定时采用B树索引,结果是固定的某几个值时使用位图索引

3、函数索引中可以水泥用len、trim、substr、upper(每行返回独立结果),不能使用如sum、max、min、avg等

2)例子:

create index fbi  on student (upper(name));
select * from student where upper(name) ='WISH';

索引建立原则总结

1、如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下Oracle将使用唯一性索引而完全忽略非唯一性索引

2、至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)

3、小表不要简历索引

4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引

5、列中有很多空值,但经常查询该列上非空记录时应该建立索引

6、经常进行连接查询的列应该创建索引

7、使用create index时要将最常查询的列放在最前面

8、LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引

9、限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)

分享到:
评论

相关推荐

    oracle索引失效的总结

    oracle索引失效的总结

    ORACLE重建索引总结

    4、索引高度:索引高度是指由于数据行的插入操作而产生的索引层数,当表中添加大量数据时,oracle将生成索引的新层次以适应加入的数据行,因此,oracle索引可能有4层,但是这只会出现在索引数中产生大量插入操作的...

    oracle创建索引规律总结

    oracle创建索引很好的参考资料,好的索引能够非常大的提高数据库的查询速度

    oracle学习总结(适合刚学习oracle的人)

    这是我学习oracle后的学习总结,里面很多东西还是很有用的,时候刚学习oracle 的人

    索引优化原则及Oracle中索引总结

    Oracle索引建立原则  · 确定针对该表的操作是大量的查询操作还是大量的增删改操作。  · 尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。  · where语句中...

    深入oracle分区索引的详解

    表可以按range、hash、list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。局部索引local index1.局部...

    Oracle索引(B*tree与Bitmap)的学习总结

    本篇文章是对Oracle索引(B*tree与Bitmap)进行了详细的分析介绍,需要的朋友参考下

    Oracle分区表及分区索引

    总结描述Oracle 11g分区表的种类及分区索引的类型。范围分区,列表分区,散列分区,组合分区,哈希分区,全局索引,分区索引

    关于oracle的表空间,分区表,以及索引的总结

    关于oracle的表空间,分区表,以及索引的总结

    oracle索引简介

    对于oracle索引简单整理和总结,分享一下,与大家共同学习和交流

    数据库索引总结

    sqlserver oracle 数据库中索引的使用总结,分类描述索引类别及使用。

    Oracle执行计划不走索引的原因总结

    在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要介绍这部分内容,接下来让我们一起来了解一下。  不走索引大体有以下几个原因: ...

    Oracle关于重建索引争论的总结

    当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引。近来Oracle也提出了...

    Oracle复合索引与空值的索引使用问题小结

    于是手动测试,环境采用Oracle自带的scott用户下的emp表。 1.首先查看如下语句的执行计划(此时表只有主键索引): 2.添加IX_TEST(deptno,comm)后查看执行计划: 发现依然是全表扫描。 3.为deptno列添加非空约束...

    oracle书籍库总结

    oracle数据库总结,从表空间到索引 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    oracle学习日志总结

    4. Select 中 避免使用*, oracle需要转换成表的列,通过查询数据字典获得,耗费时间). 5. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序尽可能的让字段顺序与索引顺序...

    Oracle调优总结

    Oracle调优总结,常用Sql语句优化,索引使用等。。。

    Oracle Database12c数据库100个新特性与案例总结V2.0

    目 录 1 Oracle 12cR1数据库新特性 6 1.1 Oracle Pluggable Database 6 1.1.1 可插拔数据库概述 6 ...1.5 相同字段上的多重索引 13 1.6 DDL日志 13 1.7 临时undo 13 ···················

Global site tag (gtag.js) - Google Analytics