Oracle数据库中索引的维护.docx

上传人:rrsccc 文档编号:10398127 上传时间:2021-05-14 格式:DOCX 页数:11 大小:19.20KB
返回 下载 相关 举报
Oracle数据库中索引的维护.docx_第1页
第1页 / 共11页
Oracle数据库中索引的维护.docx_第2页
第2页 / 共11页
Oracle数据库中索引的维护.docx_第3页
第3页 / 共11页
Oracle数据库中索引的维护.docx_第4页
第4页 / 共11页
Oracle数据库中索引的维护.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Oracle数据库中索引的维护.docx》由会员分享,可在线阅读,更多相关《Oracle数据库中索引的维护.docx(11页珍藏版)》请在三一文库上搜索。

1、Oracle数据库中索引的维护Oracle数据库中索引的保护本文只会商Oracle中最多见的索引,便是B-tree索引。本文中波及的数据库版本是Oracle8i。一. 检察体系表中的用户索引正在Oracle中,SYSTEM表是安置数据库时主动创建的,它包孕数据库的齐部数据字典,存储历程、包、函数以及触收器的界说和体系回滚段。一样平常去道,应当只管躲免正在SYSTEM表中存储非SYSTEM用户的对于象。果为那样会带去数据库保护以及办理的不少成绩。一旦SYSTEM表益坏了,只能从头死成数据库。咱们能够用上面的语句去反省正在SYSTEM表内有无其余用户的索引存正在。select count(*) f

2、rom dba_indexeswhere tablespace_name = SYSTEMand owner not in (SYS,SYSTEM)2. 索引的存储情形反省Oracle为数据库中的一切数据分派逻辑布局空间。数据库空间的单元是数据块(block)、局限(extent)以及段(segment)。Oracle数据块(block)是Oracle利用以及分派的最小存储单元。它是由数据库创建时配置的DB_BLOCK_SIZE决意的。一旦数据库死成为了,数据块的年夜小没有能扭转。要念扭转只能从头创建数据库。(正在Oracle9i中有一些没有同,没有过那没有正在本文会商的局限内。)Extent

3、是由一组一连的block构成的。一个或者多个extent构成一个segment。当一个segment 中的一切空间被用完时,Oracle为它分派一个新的extent。Segment是由一个或者多个extent构成的。它包孕某表空间中特定逻辑存储布局的一切数据。一个段中的extent能够是没有一连的,乃至能够正在没有同的数据文件中。一个object只能对于应于一个逻辑存储的segment,咱们经由过程检察该segment中的extent,能够瞧出响应object的存储情形。(1)检察索引段中extent的数目:select segment_name, count(*)from dba_exten

4、tswhere segment_type=INDEXand owner=UPPER(&owner)group by segment_name/(2)检察表空间内的索引的扩大情形:select substr(segment_name,1,20) SEGMENT NAME, bytes, count(bytes)from dba_extents where segment_name in ( select index_name from dba_indexes where tablespace_name=UPPER(&表空间) )group by segment_name, bytesorder

5、by segment_name/3. 索引的取舍性索引的取舍性是指索引列中没有同值的数量取表中纪录数的比。假如一个表中有2000笔记录,表索引列有1980个没有同的值,那末那个索引的取舍性便是1980/2000=0.99。一个索引的取舍性越亲近于1,那个索引的效力便越下。假如是利用基于cost的最劣化,劣化器没有应当利用取舍性没有好的索引。假如是利用基于rule的最劣化,劣化器正在断定实行途径时没有会思索索引的取舍性(除了非是仅有性索引),而且没有患上没有脚工劣化查问以免利用非取舍性的索引。断定索引的取舍性,能够有两种圆法:脚工丈量以及主动丈量。(1)脚工丈量索引的取舍性假如要依据一个表的两列

6、创立两列并置索引,能够用下列圆法丈量索引的取舍性:列的取舍性=没有同值的数量/止的总数/* 越亲近1越好*/select count(distinct 第一列|%|第2列)/count(*) from 表名假如咱们明白个中一列索引的取舍性(比方个中一列是主键),那末咱们便能够明白另外一列索引的取舍性。脚工圆法的劣面是正在创立索引前便能评价索引的取舍性。(2)主动丈量索引的取舍性假如剖析一个表,也会主动剖析一切表的索引。第一,为了断定一个表切实其实定性,便要剖析表。analyze table 表名compute statistics第2,断定索引里没有同闭键字的数量:select distinc

7、t_keys from user_indexes where table_name=表名 and index_name=索引名 第3,断定表中止的总数:select num_rows from user_tables where table_name=表名第4,索引的取舍性=索引里没有同闭键字的数量/表中止的总数:select i.distinct_keys/t.num_rows from user_indexes i, user_tables twhere i.table_name=表名 and i.index_name=索引名 and i.table_name=t.table_name第5

8、,能够查问USER_TAB_COLUMNS以懂得每一个列的取舍性。表中一切止正在该列的没有同值的数量:select column_name, num_distinct from user_tab_columns where table_name=表名列的取舍性=NUM_DISTINCT/表中一切止的总数,查问USER_TAB_COLUMNS有助丈量每一个列的取舍性,但它其实不能粗确天丈量列的并置搭配的取舍性。要念丈量一组列的取舍性,必要接纳脚工圆法或者者依据那组列创立一个索引偏重新剖析表。4. 断定索引的真际碎片伴着数据库的利用,没有可躲免天对于基础表举行拔出,更新以及删除了,那样招致叶子止正

9、在索引中被删除了,使该索引发生碎片。拔出删除了越频仍的表,索引碎片的水平也越下。碎片的发生使会见以及利用该索引的I/O本钱删减。碎片较下的索引必需重修以坚持最好功能。(1)使用考证索引下令对于索引举行考证。那将有代价的索引疑息挖进index_stats表。validate index 用户名.索引名(2)查问index_stats表以断定索引中删除了的、已挖谦的叶子止的百分比。select name, del_lf_rows, lf_rows,round(del_lf_rows/(lf_rows+0.0000000001)*100) Frag Percentfrom index_stats (

10、3)假如索引的叶子止的碎片凌驾10%,思索对于索引举行重修。alter index 用户名.索引名rebuildtablespace 表空间名storage(initial 初初值next 扩大值)nologging(4)假如出于空偶尔其余思索,没有能重修索引,能够收拾索引。alter index用户名.索引名coalesce(5)浑除了剖析疑息analyze index 用户名.索引名delete statistics5. 重修索引(1)反省必要重修的索引依据下列多少圆里举行反省,断定必要重修的索引。第一,检察SYSTEM表空间中的用户索引为了不数据字典的碎片呈现,要只管躲免正在SYSTEM

11、表空间呈现用户的表以及索引。select index_name from dba_indexeswhere tablespace_name=SYSTEM and owner not in (SYS,SYSTEM)第2,确保用户的表以及索引没有正在统一表空间内表以及索引对于象的第一个划定规矩是把表以及索引分别。把表以及响应的索引创建正在没有同的表空间中,最佳正在没有同的磁盘上。那样能够躲免正在数据办理以及查问时呈现的很多I/O抵触。set linesize 120col OWNER format a20col INDEX format a30col TABLE format a30col TAB

12、LESPACE format a30select i.owner OWNER, i.index_name INDEX, t.table_name TABLE,i.tablespace_name TABLESPACEfrom dba_indexes i, dba_tables twhere i.owner=t.ownerand i.table_name=t.table_nameand i.tablespace_name=t.tablespace_nameand i.owner not in (SYS,SYSTEM)/第3,检察数据表空间里有哪些索引用户的默许表空间应当没有是SYSTEM表空间,而

13、是数据表空间。正在创建索引时,假如没有指定响应的索引表空间名,那末,该索引便会创建正在数据表空间中。那是步伐员常常疏忽的一个成绩。应当正在建索引时,明白的指明响应的索引表空间。col segment_name format a30select owner, segment_name, sum(bytes) from dba_segments where tablespace_name=数据表空间名 and segment_type=INDEX group by owner,segment_name/第4,检察哪一个索引被扩大了凌驾10次伴着表纪录的删减,响应的索引也要删减。假如一个索引的nex

14、t extent值配置没有开理(过小),索引段的扩大变患上很频仍。索引的extent太多,检索时的速率以及效力便会落低。set linesize 100col owner format a10col segment_name format a30col tablespace_name format a30select count(*), owner, segment_name, tablespace_namefrom dba_extentswhere segment_type=INDEXand owner not in (SYS,SYSTEM)group by owner,segment_na

15、me,tablespace_namehaving count(*) 10order by count(*) desc/(2)寻出必要重修的索引后,必要断定索引的年夜小,以配置开理的索引存储参数。set linesize 120col INDEX format a30col TABLESPACE format a20select owner OWNER, segment_name INDEX, tablespace_name TABLESPACE, bytes BYTES/COUNT, sum(bytes) TOTAL BYTES,round(sum(bytes)/(1024*1024),0)

16、TOTAL M,count(bytes) TOTAL COUNTfrom dba_extentswhere segment_type=INDEXand segment_name in (索引名1,索引名2, .)group by owner,segment_name,segment_type,tablespace_name,bytesorder by owner,segment_name/(3)断定索引表空间借有充足的残余空间断定要把索引重修到哪一个索引表空间中。要保障响应的索引表空间有充足的残余空间。select round(bytes/(1024*1024),2) free(M)from

17、sm$ts_freewhere tablespace_name=表空间名/(4)重修索引重修索引时要注重下列多少面:a.假如没有指定tablespace名,索引将建正在用户的默许表空间。b.假如没有指定nologging,将会写日记,招致速率变缓。因为索引的重修出有复原的需要,以是,能够没有写日记。c.假如呈现资本闲,标明有历程在利用该索引,守候一会再提交。alter index 索引名rebuildtablespace 索引表空间名storage(initial 初初值next 扩大值)nologging/(5)反省索引对于重修好的索引举行反省。select * from dba_exten

18、ts where segment_name=索引名(6)依据索引举行查问,反省索引是不是无效利用响应的where前提举行查问,确保利用该索引。瞧瞧利用索引后的动机怎样。select * from dba_ind_columns where index_name like 表名%而后,依据响应的索引项举行查问。select * from 表名% where .(6)寻出有碎片的表空间,并支散其碎片。重修索引后,本有的索引被删除了,那样会制成表空间的碎片。select alter tablespace |tablespace_name| coalesce;from dba_free_space_coalescedwhere percent_blocks_coalesced!=100/收拾表空间的碎片。alter tablespace 表空间名coalesce

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1