oracle重建索引的实现 (oracle是什么)

VPS云服务器 2025-04-18 21:45:28 浏览
oracle重建索引的实现

oracle重建索引是我们经常会用到的操作,下面就将为您详细介绍oracle重建索引的实现方法,希望对您能够有所帮助。

oracle重建索引有多种方式,如drop and re-create、rebuild、rebuild online等。下面简单比较这几种方式异同以及优缺点:

首先建立测试表及数据

一、drop and re-create和rebuild

首先看看正常建立索引时,对表的加锁情况。

oracle是什么

索引已创建。

可见,普通情况下建立索引时,oracle会对基表加share锁,由于share锁和 row-X是不兼容的,也就是说,在建立索引期间,无法对基表进行DML操作。

对于删除重建索引的方法就不介绍了,它与上面的描述是一样的,下面我们看看用rebuild的方式建立索引有什么特别。

索引已更改。

另开一个会话,查询此时test的加锁情况:

可见,rebuild的方式对基表的加锁方式与CREATE时是一样的。

另开一个会话,在索引正在rebuild时,执行如下SQL:

执行计划

可以看到oracle重建索引时,查询仍然可以使用旧索引。实际上,oracle在rebuild时,在创建新索引过程中,并不会删除旧索引,直到新索引rebuild成功。

从这点可以知道rebuild比删除重建的一个好处是不会影响原有的SQL查询,但也正由于此,用rebuild方式建立索引需要相应表空间的空闲空间是删除重建方式的2倍。

【编辑推荐

利用替换变量提高Oracle交互性

ORACLE系统表和数据字典视图

带您了解Oracle文件系统机制

详解四大类Oracle索引扫描

Oracle查询重复记录的三种方法


oracle 重建索引

1、重新收集统计信息analyze table 表名 compute statistics for table for all indexes for all indexed columnsanalyze index 索引名 compute statistics2、把表现不同的sql及其执行计划发上来看看

oracle数据库如何重建索引

当索引的碎片过多时,会影响执行查询的速度,从而影响到我们的工作效率。 这时候采取的最有利的措施莫过于重建索引了。 本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程,接下来我们就开始介绍这一过程。 重建索引的步骤如下: 1. 确认基本信息 登入数据库,找到专门存放index 的tablespace,并且这个tablespace下所有index的owner都是tax.将index专门存放在一个独立的tablespace, 与数据表的tablespace分离,是常用的数据库设计方法。 2. 查找哪些index需要重建 通过anlyze index .... validate structure命令可以分析单个指定的index,并且将单个index 分析的结果存放到 index_stats试图下。 一般判断的依据是: height >4 pct_used < 50% del_lf_rows / lf_rows +0.001 > 0.03 g ) 3. google上下载了遍历所有index脚本 发现anlyze index .... validate structure只能填充单个index分析信息,于是google了下,从网上下了个Loop 脚本,遍历索引空间下所有的索引名字,并且可以把所有index的分析信息存放到自己建立的一个用户表中。 4. anlyze index 锁定index 发现下载的脚本不好用,应为anlyze index在分析索引前要争取独占锁,锁住index,很明显有些index正在被应用系统的使用,所以运行anlyze失败。 这里吸取的教训是,尽量晚上做这种事。 但是本人比较喜欢准时回家,所以在语句中添加Exception Handler,抛出anlyze index执行失败的那些index 名称,使脚本正常运行完毕。 并且根据打印到前台的index name手动执行那些index分析。 5. 总结 虽然发现522个index中有160个符合上面的判断的依据。 但是发现索引都不大,而那些拥有百万leaf的索引又没有符合上面的判断条件,所以结论是无需index rebuild online. 没有啥碎片。 6.什么时候可以rebuild index呢? rebuild index online,对那些有大量DML操作的大索引是有益的。 可以每个月季度做一次针对较大索引的rebuild。

oracle如何建立索引

create index 索引名 on tbl_name (col1,col2)创建索引的目的是为了在某些字段上查询更快,而添加的一些预地址

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐