亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle數據庫中索引的維護

2024-08-29 13:46:40
字體:
來源:轉載
供稿:網友

  本文只討論Oracle中最常見的索引,即是B-tree索引。本文中涉及的數據庫版本是Oracle8i。

  一. 查看系統表中的用戶索引

  在Oracle中,SYSTEM表是安裝數據庫時自動建立的,它包含數據庫的全部數據字典,存儲過程、包、函數和觸發器的定義以及系統回滾段。

  一般來說,應該盡量避免在SYSTEM表中存儲非SYSTEM用戶的對象。因為這樣會帶來數據庫維護和治理的很多問題。一旦SYSTEM表損壞了,只能重新生成數據庫。我們可以用下面的語句來檢查在SYSTEM表內有沒有其他用戶的索引存在。

select count(*)
from dba_indexes
where tablespace_name = 'SYSTEM'
and owner not in ('SYS','SYSTEM')
/
  二. 索引的存儲情況檢查

  Oracle為數據庫中的所有數據分配邏輯結構空間。數據庫空間的單位是數據塊(block)、范圍(extent)和段(segment)。

  Oracle數據塊(block)是Oracle使用和分配的最小存儲單位。它是由數據庫建立時設置的DB_BLOCK_SIZE決定的。一旦數據庫生成了,數據塊的大小不能改變。要想改變只能重新建立數據庫。(在Oracle9i中有一些不同,不過這不在本文討論的范圍內。)

  Extent是由一組連續的block組成的。一個或多個extent組成一個segment。當一個segment中的所有空間被用完時,Oracle為它分配一個新的extent。
 
  Segment是由一個或多個extent組成的。它包含某表空間中特定邏輯存儲結構的所有數據。一個段中的extent可以是不連續的,甚至可以在不同的數據文件中。

  一個object只能對應于一個邏輯存儲的segment,我們通過查看該segment中的extent,可以看出相應object的存儲情況。

 ?。?)查看索引段中extent的數量:

select segment_name, count(*)
from dba_extents
where segment_type='INDEX'
and owner=UPPER('&owner')
group by segment_name
/
 ?。?)查看表空間內的索引的擴展情況:

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,bytes
order by segment_name
/ 三. 索引的選擇性

  索引的選擇性是指索引列中不同值的數目與表中記錄數的比。假如一個表中有2000條記錄,表索引列有1980個不同的值,那么這個索引的選擇性就是1980/2000=0.99。

  一個索引的選擇性越接近于1,這個索引的效率就越高。

  假如是使用基于cost的最優化,優化器不應該使用選擇性不好的索引。假如是使用基于rule的最優化,優化器在確定執行路徑時不會考慮索引的選擇性(除非是唯一性索引),并且不得不手工優化查詢以避免使用非選擇性的索引。

  確定索引的選擇性,可以有兩種方法:手工測量和自動測量。

 ?。?)手工測量索引的選擇性

  假如要根據一個表的兩列創建兩列并置索引,可以用以下方法測量索引的選擇性:

  列的選擇性=不同值的數目/行的總數 /* 越接近1越好 */

select count(distinct 第一列'%'第二列)/count(*)
from 表名
/
  假如我們知道其中一列索引的選擇性(例如其中一列是主鍵),那么我們就可以知道另一列索引的選擇性。

  手工方法的優點是在創建索引前就能評估索引的選擇性。

  (2)自動測量索引的選擇性

  假如分析一個表,也會自動分析所有表的索引。

  第一,為了確定一個表的確定性,就要分析表。

analyze table 表名
compute statistics
/
  第二,確定索引里不同要害字的數目:

select distinct_keys
from user_indexes
where table_name='表名'
and index_name='索引名'
/
  第三,確定表中行的總數:

select num_rows
from user_tables
where table_name='表名'
/
  第四,索引的選擇性=索引里不同要害字的數目/表中行的總數:

select i.distinct_keys/t.num_rows
from
user_indexes i,
user_tables t
where i.table_name='表名'
and i.index_name='索引名'
and i.table_name=t.table_name
/
  第五,可以查詢USER_TAB_COLUMNS以了解每個列的選擇性。

  表中所有行在該列的不同值的數目:

select
column_name,
num_distinct
from user_tab_columns
where table_name='表名'
/
  列的選擇性=NUM_DISTINCT/表中所有行的總數,查詢USER_TAB_COLUMNS有助測量每個列的選擇性,但它并不能精確地測量列的并置組合的選擇性。要想測量一組列的選擇性,需要采用手工方法或者根據這組列創建一個索引并重新分析表。

  四. 確定索引的實際碎片

  隨著數據庫的使用,不可避免地對基本表進行插入,更新和刪除,這樣導致葉子行在索引中被刪除,使該索引產生碎片。插入刪除越頻繁的表,索引碎片的程度也越高。碎片的產生使訪問和使用該索引的I/O成本增加。碎片較高的索引必須重建以保持最佳性能。

  (1)利用驗證索引命令對索引進行驗證。

  這將有價值的索引信息填入index_stats表。


validate index 用戶名.索引名
/
 ?。?)查詢index_stats表以確定索引中刪除的、未填滿的葉子行的百分比。

select
name,
del_lf_rows,
lf_rows,
round((del_lf_rows/(lf_rows+0.0000000001))*100) "Frag Percent"
from index_stats
/
 ?。?)假如索引的葉子行的碎片超過10%,考慮對索引進行重建。

alter index 用戶名.索引名 rebuild
tablespace 表空間名
storage(initial 初始值 next 擴展值)
nologging
/
  (4)假如出于空間或其他考慮,不能重建索引,可以整理索引。

alter index用戶名.索引名 coalesce
/
  (5)清除分析信息

analyze index 用戶名.索引名
delete statistics
/ 五. 重建索引

 ?。?)檢查需要重建的索引。

  根據以下幾方面進行檢查,確定需要重建的索引。

  第一,查看SYSTEM表空間中的用戶索引。

  為了避免數據字典的碎片出現,要盡量避免在SYSTEM表空間出現用戶的表和索引。

select index_name
from dba_indexes
where tablespace_name='SYSTEM'
and owner not in ('SYS','SYSTEM')
/
  第二,確保用戶的表和索引不在同一表空間內。

  表和索引對象的第一個規則是把表和索引分離。把表和相應的索引建立在不同的表空間中,最好在不同的磁盤上。這樣可以避免在數據治理和查詢時出現的許多I/O沖突。

set linesize 120
col "OWNER" format a20
col "INDEX" format a30
col "TABLE" format a30
col "TABLESPACE" format a30
select
i.owner "OWNER",
i.index_name "INDEX",
t.table_name "TABLE",
i.tablespace_name "TABLESPACE"
from
dba_indexes i,
dba_tables t
where i.owner=t.owner
and i.table_name=t.table_name
and i.tablespace_name=t.tablespace_name
and i.owner not in ('SYS','SYSTEM')
/
  第三,查看數據表空間里有哪些索引

  用戶的默認表空間應該不是SYSTEM表空間,而是數據表空間。在建立索引時,假如不指定相應的索引表空間名,那么,該索引就會建立在數據表空間中。這是程序員經常忽略的一個問題。應該在建索引時,明確的指明相應的索引表空間。

col segment_name format a30
select
owner,
segment_name,
sum(bytes)
from dba_segments
where tablespace_name='數據表空間名'
and segment_type='INDEX'
group by owner,segment_name
/
  第四,查看哪個索引被擴展了超過10次

  隨著表記錄的增加,相應的索引也要增加。假如一個索引的next extent值設置不合理(太?。饕蔚臄U展變得很頻繁。索引的extent太多,檢索時的速度和效率就會降低。

set linesize 100
col owner format a10
col segment_name format a30
col tablespace_name format a30
select
count(*),
owner,
segment_name,
tablespace_name
from dba_extents
where segment_type='INDEX'
and owner not in ('SYS','SYSTEM')
group by owner,segment_name,tablespace_name
having count(*) >10
order by count(*) desc
/

  (2)找出需要重建的索引后,需要確定索引的大小,以設置合理的索引存儲參數。

set linesize 120
col "INDEX" format a30
col "TABLESPACE" format a20
select
owner "OWNER",
segment_name "INDEX",
tablespace_name "TABLESPACE",
bytes "BYTES/COUNT",
sum(bytes) "TOTAL BYTES",
round(sum(bytes)/(1024*1024),0) "TOTAL M",
count(bytes) "TOTAL COUNT"
from dba_extents
where segment_type='INDEX'
and segment_name in
(
'索引名1',
'索引名2',
......
)
group by owner,segment_name,segment_type,tablespace_name,bytes
order by owner,segment_name
/
  (3)確定索引表空間還有足夠的剩余空間。

  確定要把索引重建到哪個索引表空間中。要保證相應的索引表空間有足夠的剩余空間。


select round(bytes/(1024*1024),2) free(M)
from sm$ts_free
where tablespace_name='表空間名'
/
 ?。?)重建索引。

  重建索引時要注重以下幾點:

  a.假如不指定tablespace名,索引將建在用戶的默認表空間。

  b.假如不指定nologging,將會寫日志,導致速度變慢。由于索引的重建沒有恢復的必要,所以,可以不寫日志。

  c.假如出現資源忙,表明有進程正在使用該索引,等待一會再提交。

alter index 索引名
rebuild
tablespace 索引表空間名
storage(initial 初始值 next 擴展值)
nologging
/
  (5)檢查索引。

  對重建好的索引進行檢查。

select *
from dba_extents
where segment_name='索引名'
/
  (6)根據索引進行查詢,檢查索引是否有效

  使用相應的where條件進行查詢,確保使用該索引??纯词褂盟饕蟮男Ч绾巍?br/>
select *
from dba_ind_columns
where index_name like '表名%'
/
  然后,根據相應的索引項進行查詢。

select *
from '表名%'
where ......
/
 ?。?)找出有碎片的表空間,并收集其碎片。

  重建索引后,原有的索引被刪除,這樣會造成表空間的碎片。

select 'alter tablespace 'tablespace_name' coalesce;'
from dba_free_space_coalesced
where percent_blocks_coalesced!=100
/
  整理表空間的碎片。

alter tablespace 表空間名 coalesce
/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品电影网| 亚洲视频在线免费看| 亚洲电影天堂av| 日韩视频中文字幕| 亚洲乱码国产乱码精品精| 国产精品91久久久久久| 日韩女在线观看| 欧美在线观看日本一区| 色视频www在线播放国产成人| 国产精品海角社区在线观看| 神马国产精品影院av| 国产色婷婷国产综合在线理论片a| 国产精品欧美日韩一区二区| 国产小视频91| 久久精品亚洲热| 97欧美精品一区二区三区| 国产精品www| 国产精品老牛影院在线观看| 91色视频在线导航| 亚洲天堂免费在线| 欧美老女人xx| 91精品国产91久久久久久久久| 亚洲视频国产视频| 国外成人在线直播| 国产主播在线一区| 91久久久久久久久| 亚洲精品91美女久久久久久久| 亚洲国产精品成人va在线观看| 91精品视频大全| 日韩在线观看成人| 国产精品成熟老女人| 中文国产成人精品久久一| 91成品人片a无限观看| 国语自产精品视频在线看一大j8| 国产视频丨精品|在线观看| 亚洲国产成人精品久久久国产成人一区| 欧美日韩亚洲精品一区二区三区| 91天堂在线视频| 久久欧美在线电影| 狠狠色噜噜狠狠狠狠97| 国产精品久久999| 性日韩欧美在线视频| 欧美日韩电影在线观看| 亚洲国产精品久久久久| 最近2019中文字幕一页二页| 国产精品扒开腿做爽爽爽的视频| 欧美日韩中文字幕| 欧美一级视频一区二区| 91精品久久久久久久久青青| 亚洲欧美www| 亚洲欧洲黄色网| 最近中文字幕mv在线一区二区三区四区| 日本精品一区二区三区在线| 国产精品99一区| 日韩三级成人av网| 成人久久一区二区三区| 亚洲激情在线视频| 久热在线中文字幕色999舞| 国产欧美精品在线播放| 欧美日韩一区二区免费在线观看| 日韩av一卡二卡| 欧美日韩成人在线观看| 久久免费视频这里只有精品| 久久久久女教师免费一区| 国产一区二中文字幕在线看| 91免费在线视频| 亚洲国产精品推荐| 神马国产精品影院av| 亚洲伊人成综合成人网| 国产在线观看91精品一区| 国产精品入口日韩视频大尺度| 亚洲自拍偷拍福利| 欧美国产在线电影| 伊人成人开心激情综合网| 国产美女精彩久久| 91在线播放国产| 亚洲第一福利网| 色综合影院在线| 69久久夜色精品国产69乱青草| 91福利视频在线观看| 国产一区二区三区精品久久久| 一个色综合导航| 久久偷看各类女兵18女厕嘘嘘| 国产精品美女久久久久av超清| 亚洲第一免费网站| 热久久美女精品天天吊色| 高清欧美性猛交xxxx黑人猛交| 国产亚洲美女久久| 欧美激情在线播放| 亚洲人成电影网站色xx| 国产精品极品在线| 欧美精品国产精品日韩精品| 亚洲精品suv精品一区二区| 亚洲国产精品99| 中文字幕九色91在线| 久久精品国产99国产精品澳门| 久久福利视频导航| 97视频网站入口| 68精品久久久久久欧美| 日韩在线视频线视频免费网站| www.日韩免费| 国产精品一区二区久久久| 国产黑人绿帽在线第一区| 欧美美最猛性xxxxxx| 久久男人的天堂| 久久成人精品电影| 国产视频精品久久久| 91国产高清在线| 亚洲韩国欧洲国产日产av| 国外成人性视频| 国产精品福利在线观看| 欧美国产日韩一区二区在线观看| 久久在线观看视频| 国产一区二区三区毛片| 亚洲一区二区三区四区视频| 清纯唯美亚洲综合| 69久久夜色精品国产7777| 精品日本高清在线播放| 国产女同一区二区| 91精品国产色综合久久不卡98口| 国产精品视频网| 精品久久久免费| 中文字幕亚洲第一| 亚洲日本欧美日韩高观看| 在线日韩av观看| 另类视频在线观看| 2019亚洲日韩新视频| 国产精品视频自拍| 国产精品白丝av嫩草影院| 91中文字幕在线观看| 国产精品久久久久7777婷婷| 日韩视频第一页| 国产suv精品一区二区| 国产精品久久久久久久app| 欧美日韩激情美女| 亚洲国产天堂久久国产91| 国产黑人绿帽在线第一区| 日韩视频永久免费观看| 欧美午夜电影在线| 亚洲片在线资源| 2018国产精品视频| 国产亚洲aⅴaaaaaa毛片| 欧美成aaa人片在线观看蜜臀| 一区二区三区视频观看| 亚洲欧美国产日韩中文字幕| 欧美午夜视频在线观看| 97婷婷大伊香蕉精品视频| 色狠狠av一区二区三区香蕉蜜桃| 欧美大片va欧美在线播放| 精品亚洲va在线va天堂资源站| 国产一区二区精品丝袜| 国产成人久久久精品一区| 国产va免费精品高清在线| 在线性视频日韩欧美| 日韩av片免费在线观看| 亚洲性xxxx| 国内免费精品永久在线视频| 久久视频中文字幕| …久久精品99久久香蕉国产| 北条麻妃在线一区二区| 国产精品久久久久av| 国产亚洲欧美日韩美女| 日本一本a高清免费不卡| 亚洲成人精品久久久|