`

Oracle Index 学习

 
阅读更多

1.index需要储存空间和I/O操作。

2.index的目的是加快select的速度的。

3.insert,update,delete数据oracle会同时对索引进行相应的调整,因此会增加一定的消耗。

4.使用index一定能加快select速度吗?不是的,数据少和巨大时index会影响select的速度,因此如果查询速度可以满足,就不要建index。

5.Index 对null 无效。

 

分类:

一、从物理角度

1. partitioned or nonpartitioned : 分区或不分区索引。分区索引用于分区表。

2.B-tree(平衡树) : normal or reverse key 正常和倒序索引。

   oracle默认索引方式,平衡树形索引,在叶子节点上有双向链表,加快索引定位速度,oracle有一定的优化,可以根据链表直接定位记录,而不走树,综合使用提高速度。见图1和图2。

图1


图2



 3.bitmap(位图) :用二进制的0、1来构建索引,在进行or操作时非常快, 但要注意bitmap对于并发操作时,改一条会锁了很多记录,因为所有的记录在一个索引条目上,所以修改或增加时会一起锁定,见图3.

图3



 区别和使用场景

 

B-tree索引

Bitmap 索引

Suitable for high-cardinality columns(记录对应的列重复的值较少,如主键,姓名等 )。

Suitable for low-cardinality columns(用在记录相同的值较多的列上,如果性别只有两种值:男和女)。

Updates on keys relatively inexpensive (在做updated时,b-tree只消耗很少的资源)。

Updates to key columns very expensive

(在做updated时,bitmap的消耗是昂贵的)。

Inefficient for queries using OR predicates(where子句中 or条件较多时速度较慢)

Effcient for queries using OR predicates

(where子句中 or条件较多时速度非常快)

Useful for OLTP(记录频繁的insert和update,查询相对较少的系统)。

Useful for data warehousing (OLIP)数据仓库,查询系统等较少做数据修改的系统。

 

 

 

二、逻辑角度:

1.single column or concatenated单索引和组合索引。

2.unique or nonunique: 唯一索引和非唯一索引。

3.function-based: 基于函数的索引,把一些where条件作为函数。

4.domain: 数据库以外的索引,如文件等。

 

 

三、创建index时的注意事项:

1.balance query and DML needs: 索引的目的是为了提高查询速度,但它会加重DML的负担。

2.place in separate tablespace: 索引和表应该放在不同的表空间,如果把索引和表放在同一个空间,会引起竞争,因为在读取一个表时,记录和索引是同时读取,修改也同步进行的。

3.use uniform extent sizes:Multipes of five blocks or minimum extent size for tablespace. 索引空间是extent是大小应该是5 blocks的倍数,因为oracle是一次读出5个blocks,如果你的extends是6,就会造成2次I/O操作。

4. consider nologging for large indexes: 在创建索引时可以关闭索引对应的redo 日志,提高速度,因为索引和数据不同,如果索引创建时出意外,数据还在,就再创建一次好了。

5.INITRANS should generally be higher on indexes than on the corresponding tables:INITRANS 参数比对应的表的值大些,因为索引也是已表记录的方式保存的,但索引大大小于表的记录,所以一个block中存储的索引记录就大大多于表在一个block中的记录,加大INITRANS可以增加在一个block中的事务的并发数,就提高了效率。

6.rebuilding indexes:如果删除一条记录,对应的索引仅仅是做了逻辑删除,只有一个block中的全部索引都被标识为逻辑删除,orcle才会真正的回收block, 这时这个block才能被再次利用,在表的记录做update时,index是先做了逻辑删除,然后再为该记录新建一个索引的,所以表在频繁的增删改后,就会造成index对应的block不完整,和系统碎片的情况是一致的,造成空间浪费,加大index的I/O,影响性能。而rebuilding indexes就可以回收原来的,重新构建一个高效的索引,但重构时会锁表。

              语法: alter index index_name rebuild;

7. coalescing indexes: 整理索引碎片,效率高,不锁表。

语法:Alter index index_name coalesce;

 

四.管理索引

1.分析索引:

1) select * from user_objects where object_type='INDEX'

2)analyze index PK_T_TICKET validate structure;

3)select * from index_stats;

 

HEIGHT(b-tree的高度)

BLOCKS(索引有多少块)

NAME(索引名)

LF_ROWS(记录数)

DEL_LF_ROWS(删除记录数)

2

256

PK_T_TICKET

82775

792

 

当 DEL_LF_ROWS/ LF_ROWS>15%时应进行 索引重建或 索引碎片整理。

 

2.drop 索引:当屁量导入大量数据时,索引会影响导入速度。可以现在drop掉,导入后再重建索引。

 

3.监控索引:

    1)设置监控那个索引 alter index pk_t_ticket monitoring usage;

2)查看该索引用没有使用select * from v$object_usage

3)select count(1) from pk_t_ticket;

4) 查看该索引用没有使用select * from v$object_usage

5)关闭监控 alter index pk_t_ticket nomonitoring usage;

监控一个月就大概可以知道那些是无用的索引了。

6) 查询索引的详细信息 : select * from all_ind_columns where index_name='PK_T_TICKET' .那个表的那个列上有索引及详细信息。

  • 大小: 37.4 KB
  • 大小: 27.9 KB
  • 大小: 28.8 KB
分享到:
评论

相关推荐

    oracle index学习总结

    Oracle索引是数据库管理系统中用于加速数据检索的关键结构。...以上内容是根据“oracle index学习总结”文档的摘要,详细内容可参考提供的链接或文档:《oracle index学习总结.doc》和《oracle index学习总结.pdf》。

    ORACLE数据库学习笔记

    本文主要针对ORACLE数据库的学习笔记进行深入解析。 首先,SQL是Structured Query Language的缩写,即结构化查询语言,它是用于管理关系数据库的标准语言。SQL主要包括五种类型的子语言:DDL(Data Definition ...

    Oracle数据库学习指南

    5. Oracle Index 的三个问题 6. Oracle PL-SQL语言基础 7. Oracle的分布式管理 8. ORACLE的数据类型 9. Oracle数据库碎片整理 10.ORACLE性能调整1 11.ORACLE性能调整2 12.Oracle专家调优秘密 13.PL...

    oracle sql语句学习

    这个"oracle sql语句学习"资源包显然旨在帮助初学者逐步提升到高级水平,通过全面的笔记资料,使用户能够从基础概念到复杂操作都能熟练掌握。 首先,我们从基础开始。SQL,全称Structured Query Language(结构化...

    Tianlesoftware Oracle 学习手册(v1.0)高清完整PDF版

    ### Tianlesoftware Oracle 学习手册(v1.0)中的关键知识点 #### 1. ORACLE基础知识 ##### 1.1 OLAP与OLTP介绍 **1.1.1 什么是OLTP** OLTP(Online Transaction Processing,在线事务处理)是一种主要针对企业...

    重新整理后的Oracle OAF学习笔记——离线版本

    10. `index.html` - 主页文件,通常用于引导用户进入整个学习资料的目录或索引。 通过这些文件,学习者可以了解到OAF的基础架构、页面构建、业务逻辑、数据模型、用户界面设计以及错误处理等多个方面的内容。结合...

    学习oracle的一些网站

    - **Oracle 9i AS 文档库**(http://download-west.oracle.com/docs8_06/index.htm):提供了详细的Oracle 9i AS版本的产品文档和技术指南,非常适合深入研究和学习。 - **Oracle 9i 数据库概念**...

    oracle 学习知识点速查

    Oracle的学习涵盖了数据库安装、体系结构、用户管理、网络配置、数据库启动和关闭等多个方面,对于理解Oracle的工作原理和进行日常数据库管理至关重要。掌握这些知识点将有助于在实际工作中有效地管理和维护Oracle...

    oracle学习笔记-入门基础

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...

    oracleinde学习总结.docx

    Oracle Index 学习总结 一、索引概述 索引是 Oracle 中用于提高查询速度的一种机制。索引需要储存空间和 I/O 操作。索引的目的是加快 Select 速度,但 Insert、Update、Delete 数据时 Oracle 会同时对索引进行相应...

    ORACLE学习

    ### ORACLE学习知识点详解 #### 一、Oracle数据库的基础架构 **1. 物理存储结构:** - **数据文件(Data Files):** 存储实际数据和元数据的文件,一个表空间可以对应一个或多个数据文件。 - **日志文件(Log Files...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    oracle 学习PDF

    根据提供的文档信息,我们可以归纳出一系列关于Oracle SQL学习的关键知识点,包括SQL的基础概念、基本查询语句、函数使用、多表查询、数据处理操作、事务管理、数据定义语言(DDL)、数据操纵语言(DML)以及其他...

    oracle学习总结

    根据提供的文件信息,我们可以归纳出一系列关于Oracle数据库学习的关键知识点,包括SQL语句的基本使用、时间函数的应用以及一些Oracle特有的命令等。 ### Oracle学习总结 #### SQL基础语法 1. **数据定义语言(DDL...

    基础的oracle学习的笔记

    掌握这些基本操作是学习Oracle的第一步。 数据类型是Oracle中的重要概念,它们定义了数据库中字段可以存储的数据种类。常见的数据类型有NUMBER(用于数值,可包含整数和小数),VARCHAR2(用于可变长度的字符串),...

    Oracle数据库学习笔记

    以下是对Oracle数据库学习笔记的详细阐述: 首先,同义词(Synonyms)在Oracle中扮演着重要角色,它们为数据库对象提供了一个替代名称,有助于隐藏实际对象的名称和所有者,从而增加了安全性并简化了对象的访问。...

    Oracle学习资料 自己整理的

    从给定的文件标题“Oracle学习资料 自己整理的”以及描述“从OCA到OCP内容,常用的命令和使用方法,技巧等”,我们可以提炼出一系列关于Oracle数据库管理与操作的关键知识点,涵盖从初级到高级的技能提升路径。...

Global site tag (gtag.js) - Google Analytics