`

oracle index学习总结

阅读更多

oracle index

 

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

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

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

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

5Index null 无效。

 

分类:

一、从物理角度

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

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

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

1



 

 

2



 

 

 

 

 

 

 

 

 

 

 

 

 

3.bitmap(位图)  :用二进制的01来构建索引,在进行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 predicateswhere子句中 or条件较多时速度较慢)

Effcient for queries using OR predicates

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

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

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是一次读出5blocks,如果你的extends6,就会造成2I/O操作。

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

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

6.rebuilding indexes:如果删除一条记录,对应的索引仅仅是做了逻辑删除,只有一个block中的全部索引都被标识为逻辑删除,orcle才会真正的回收block, 这时这个block才能被再次利用,在表的记录做update时,index是先做了逻辑删除,然后再为该记录新建一个索引的,所以表在频繁的增删改后,就会造成index对应的block不完整,和系统碎片的情况是一致的,造成空间浪费,加大indexI/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'

2analyze index PK_T_TICKET validate structure;

3select * from index_stats;

HEIGHTb-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

3select 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' .那个表的那个列上有索引及详细信息。

  • 大小: 80.4 KB
  • 大小: 58 KB
  • 大小: 77.2 KB
分享到:
评论

相关推荐

    oracle学习总结

    ### Oracle学习总结 #### SQL基础语法 1. **数据定义语言(DDL)** - **创建表**:`CREATE TABLE table_name (column_name datatype constraints,...);` - `NOT NULL`:指定列不允许有空值。 - `UNIQUE`:指定列...

    oracleinde学习总结.docx

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

    Oracle非常全的学习总结

    本学习总结涵盖了Oracle的入门知识、全套命令及SQL语法,旨在为初学者提供全面的学习材料。以下是对这些主题的详细阐述: 一、Oracle入门总结 Oracle数据库的基本概念包括数据库实例、表空间、数据文件、控制文件、...

    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 数据库语法总结

    这篇文档“Oracle数据库语法总结”旨在为用户提供一个全面的参考指南,帮助理解和掌握Oracle SQL的使用。 1. **数据定义语言(DDL)** - **创建表(CREATE TABLE)**:用于定义表的结构,包括字段名、数据类型、...

    oracle日常操作总结

    Oracle数据库是世界上最广泛使用的数据库系统之一,其日常操作对于DBA和系统管理员来说至关重要。...在实际工作中,结合具体的业务需求和问题,不断学习和实践,将使你成为更加专业的Oracle数据库管理员。

    oracle 日常所用总结

    本文将基于“oracle 日常所用总结”的主题,深入探讨Oracle中的常用命令、触发器、游标、视图以及等待事件,旨在帮助用户更好地理解和应用这些关键概念。 1. **Oracle常用命令**: - 数据查询:`SELECT`语句是查询...

    oracle相关操作总结

    Oracle数据库是世界上最流行的数据库管理系统之一,广泛应用于企业级数据存储和管理。本篇文章将深入探讨Oracle的相关操作,帮助你...阅读“oracle相关操作.doc”和“oracle总结.docx”将为你提供更详细的指导和实例。

    oracle学习笔记

    从给定的文件信息来看,这是一份...总结来说,Oracle的学习手册深入浅出地介绍了OLAP与OLTP的区别、索引的原理和使用技巧,为初学者提供了宝贵的指南。理解这些概念和技术,对于有效地管理和优化Oracle数据库至关重要。

    Oracle Index Internals.pdf

    ### Oracle Index Internals #### 知识点概览 本文档深入探讨了Oracle数据库中的索引内部机制。主要内容包括各种类型的Oracle索引结构及其实施方式、索引的行为、维护策略以及成本基础优化器如何确定索引的使用...

    oracle总结易错点

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其复杂性和深度使得学习过程中难免会遇到一些易错点。...在实践中不断学习和总结,提升数据库管理技能,对提升工作效率和保障系统稳定性至关重要。

    ORACLE学习手册和案例

    ### ORACLE学习手册和案例知识点总结 #### 一、ORACLE基础知识 ##### 1.1 ORACLE OLAP与OLTP介绍 **1.1.1 什么是OLTP** OLTP(Online Transaction Processing,在线事务处理)是针对业务系统的日常运作而设计的...

    数据库oracle 学习笔记重点总结

    根据给定的信息,我们可以整理出以下关于Oracle数据库学习的重点知识点: ### 一、Oracle数据库启动与关闭 在Oracle数据库管理中,启动与关闭是基本的操作之一。这些操作可以通过SQL*Plus命令来完成。 #### 启动...

    oracle常用函数总结

    根据提供的文件信息,我们可以归纳出以下与Oracle数据库相关的知识点: ...对于Oracle数据库的学习和使用来说,这些都是非常基础且重要的内容。希望这些知识点能够帮助您更好地理解和掌握Oracle数据库的使用方法。

    Oracle调优总结

    在 Oracle 中,存在多种表连接方式,如 Hash Join、Merge Join、Nest Loop Join、Index Join 等。选择合适的连接方式可以大大提高查询性能。 四、使用 CBO 优化器 CBO(Cost-Based Optimizer)是 Oracle 中的一种...

    TianleSoftware Oracle中文学习手册

    总结而言,这本手册涵盖了Oracle数据库的多个重要方面,从基础概念到高级特性都有所涉猎,适合初学者和有一定经验的数据库管理员作为参考资料。手册中的内容不仅包括了理论知识,还涉及到了具体的实现方法,如索引的...

    Oracle调优总结收藏.docx

    Oracle 调优总结收藏 本文总结了 Oracle 数据库的调优方法,涵盖了数据库结构、索引、SQL 优化、执行计划、绑定变量等方面的知识点。通过学习这些内容,可以帮助读者更好地理解 Oracle 数据库的工作机理,并提高...

    oracle学习笔记.docx

    总结,Oracle数据库的学习是一个深度和广度兼具的过程,涵盖了从基础的SQL语法到复杂的数据库设计、性能优化和安全管理等多个方面。理解并熟练运用这些知识点,将有助于你成为一位专业的Oracle数据库管理员或开发者...

Global site tag (gtag.js) - Google Analytics