亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Oracle數(shù)據(jù)庫索引的維護(hù)

 更新時(shí)間:2007年03月07日 00:00:00   作者:  
正在看的ORACLE教程是:Oracle數(shù)據(jù)庫索引的維護(hù)。

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

  一. 查看系統(tǒng)表中的用戶索引

  在Oracle中,SYSTEM表是安裝數(shù)據(jù)庫時(shí)自動(dòng)建立的,它包含數(shù)據(jù)庫的全部數(shù)據(jù)字典,存儲(chǔ)過程、包、函數(shù)和觸發(fā)器的定義以及系統(tǒng)回滾段。

  一般來說,應(yīng)該盡量避免在SYSTEM表中存儲(chǔ)非SYSTEM用戶的對(duì)象。因?yàn)檫@樣會(huì)帶來數(shù)據(jù)庫維護(hù)和管理的很多問題。一旦SYSTEM表損壞了,只能重新生成數(shù)據(jù)庫。我們可以用下面的語句來檢查在SYSTEM表內(nèi)有沒有其他用戶的索引存在。


  二. 索引的存儲(chǔ)情況檢查

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

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

  Extent是由一組連續(xù)的block組成的。一個(gè)或多個(gè)extent組成一個(gè)segment。當(dāng)一個(gè)segment中的所有空間被用完時(shí),Oracle為它分配一個(gè)新的extent。
  
  Segment是由一個(gè)或多個(gè)extent組成的。它包含某表空間中特定邏輯存儲(chǔ)結(jié)構(gòu)的所有數(shù)據(jù)。一個(gè)段中的extent可以是不連續(xù)的,甚至可以在不同的數(shù)據(jù)文件中。

  一個(gè)object只能對(duì)應(yīng)于一個(gè)邏輯存儲(chǔ)的segment,我們通過查看該segment中的extent,可以看出相應(yīng)object的存儲(chǔ)情況。

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


 ?。?)查看表空間內(nèi)的索引的擴(kuò)展情況:

三. 索引的選擇性

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

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

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

  確定索引的選擇性,可以有兩種方法:手工測(cè)量和自動(dòng)測(cè)量。

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

  如果要根據(jù)一個(gè)表的兩列創(chuàng)建兩列并置索引,可以用以下方法測(cè)量索引的選擇性:

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


  如果我們知道其中一列索引的選擇性(例如其中一列是主鍵),那么我們就可以知道另一列索引的選擇性。

  手工方法的優(yōu)點(diǎn)是在創(chuàng)建索引前就能評(píng)估索引的選擇性。

  (2)自動(dòng)測(cè)量索引的選擇性

  如果分析一個(gè)表,也會(huì)自動(dòng)分析所有表的索引。

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


  第二,確定索引里不同關(guān)鍵字的數(shù)目:


  第三,確定表中行的總數(shù):


  第四,索引的選擇性=索引里不同關(guān)鍵字的數(shù)目/表中行的總數(shù):


  第五,可以查詢USER_TAB_COLUMNS以了解每個(gè)列的選擇性。

  表中所有行在該列的不同值的數(shù)目:


  列的選擇性=NUM_DISTINCT/表中所有行的總數(shù),查詢USER_TAB_COLUMNS有助測(cè)量每個(gè)列的選擇性,但它并不能精確地測(cè)量列的并置組合的選擇性。要想測(cè)量一組列的選擇性,需要采用手工方法或者根據(jù)這組列創(chuàng)建一個(gè)索引并重新分析表。

  四. 確定索引的實(shí)際碎片

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

 ?。?)利用驗(yàn)證索引命令對(duì)索引進(jìn)行驗(yàn)證。

  這將有價(jià)值的索引信息填入index_stats表。


 ?。?)查詢index_stats表以確定索引中刪除的、未填滿的葉子行的百分比。


  (3)如果索引的葉子行的碎片超過10%,考慮對(duì)索引進(jìn)行重建。


  (4)如果出于空間或其他考慮,不能重建索引,可以整理索引。


 ?。?)清除分析信息

[NextPage]

五. 重建索引

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

  根據(jù)以下幾方面進(jìn)行檢查,確定需要重建的索引。

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

  為了避免數(shù)據(jù)字典的碎片出現(xiàn),要盡量避免在SYSTEM表空間出現(xiàn)用戶的表和索引。


  第二,確保用戶的表和索引不在同一表空間內(nèi)。

  表和索引對(duì)象的第一個(gè)規(guī)則是把表和索引分離。把表和相應(yīng)的索引建立在不同的表空間中,最好在不同的磁盤上。這樣可以避免在數(shù)據(jù)管理和查詢時(shí)出現(xiàn)的許多I/O沖突。


  第三,查看數(shù)據(jù)表空間里有哪些索引

  用戶的默認(rèn)表空間應(yīng)該不是SYSTEM表空間,而是數(shù)據(jù)表空間。在建立索引時(shí),如果不指定相應(yīng)的索引表空間名,那么,該索引就會(huì)建立在數(shù)據(jù)表空間中。這是程序員經(jīng)常忽略的一個(gè)問題。應(yīng)該在建索引時(shí),明確的指明相應(yīng)的索引表空間。


  第四,查看哪個(gè)索引被擴(kuò)展了超過10次

  隨著表記錄的增加,相應(yīng)的索引也要增加。如果一個(gè)索引的next extent值設(shè)置不合理(太?。饕蔚臄U(kuò)展變得很頻繁。索引的extent太多,檢索時(shí)的速度和效率就會(huì)降低。


 ?。?)找出需要重建的索引后,需要確定索引的大小,以設(shè)置合理的索引存儲(chǔ)參數(shù)。


 ?。?)確定索引表空間還有足夠的剩余空間。

  確定要把索引重建到哪個(gè)索引表空間中。要保證相應(yīng)的索引表空間有足夠的剩余空間。


 ?。?)重建索引。

  重建索引時(shí)要注意以下幾點(diǎn):

  a.如果不指定tablespace名,索引將建在用戶的默認(rèn)表空間。

  b.如果不指定nologging,將會(huì)寫日志,導(dǎo)致速度變慢。由于索引的重建沒有恢復(fù)的必要,所以,可以不寫日志。

  c.如果出現(xiàn)資源忙,表明有進(jìn)程正在使用該索引,等待一會(huì)再提交。


 ?。?)檢查索引。

  對(duì)重建好的索引進(jìn)行檢查。


 ?。?)根據(jù)索引進(jìn)行查詢,檢查索引是否有效

  使用相應(yīng)的where條件進(jìn)行查詢,確保使用該索引??纯词褂盟饕蟮男Ч绾巍?


  然后,根據(jù)相應(yīng)的索引項(xiàng)進(jìn)行查詢。


  (6)找出有碎片的表空間,并收集其碎片。

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


  整理表空間的碎片。



上一頁    

相關(guān)文章

  • ORACLE應(yīng)用經(jīng)驗(yàn)(1)

    ORACLE應(yīng)用經(jīng)驗(yàn)(1)

    ORACLE應(yīng)用經(jīng)驗(yàn)(1)...
    2007-03-03
  • 深入Oracle字符集的查看與修改詳解

    深入Oracle字符集的查看與修改詳解

    本篇文章是對(duì)Oracle字符集的查看與修改進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • oracle查詢鎖表與解鎖情況提供解決方案

    oracle查詢鎖表與解鎖情況提供解決方案

    如果發(fā)生了鎖等待,我們可能更想知道是誰鎖了表而引起誰的等待,本文將詳細(xì)問您介紹此等問題的解決方法,有這方面需求的朋友可適當(dāng)參考
    2012-11-11
  • 探索ORACLE之ASM概念(完整版)

    探索ORACLE之ASM概念(完整版)

    ASM是Oracle 10g R2中為了簡化Oracle數(shù)據(jù)庫的管理而推出來的一項(xiàng)新功能,這是Oracle自己提供的卷管理器,主要用于替代操作系統(tǒng)所提供的LVM,它不僅支持單實(shí)例,同時(shí)對(duì)RAC的支持也是非常好
    2013-11-11
  • CentOS6.2上安裝Oracle10g報(bào)ins_emdb.mk錯(cuò)誤處理方法

    CentOS6.2上安裝Oracle10g報(bào)ins_emdb.mk錯(cuò)誤處理方法

    oracle安裝過程報(bào)ins_emdb.mk錯(cuò)誤,此時(shí)繼續(xù)點(diǎn)擊“continue”即可,待Oracle完成安裝后,再手工執(zhí)行相應(yīng)腳本完成鏈接即可
    2014-09-09
  • Oracle取整函數(shù)用法案例

    Oracle取整函數(shù)用法案例

    四舍五入是我們最早接觸的數(shù)學(xué)概念之一,我們?nèi)粘i_發(fā)系統(tǒng)中,數(shù)字取整也是我們最常接觸的一種需求樣式,下面這篇文章主要給大家介紹了關(guān)于Oracle取整函數(shù)用法的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Oracle也有注入漏洞

    Oracle也有注入漏洞

    Oracle也有注入漏洞...
    2007-03-03
  • oracle索引介紹(圖文詳解)

    oracle索引介紹(圖文詳解)

    在關(guān)系數(shù)據(jù)庫中,索引是一種與表有關(guān)的數(shù)據(jù)庫結(jié)構(gòu),它可以使對(duì)應(yīng)于表的SQL語句執(zhí)行得更快。索引的作用相當(dāng)于圖書的目錄,可以根據(jù)目錄中的頁碼快速找到所需的內(nèi)容
    2014-06-06
  • Oracle試用到期如何刪除注冊(cè)表繼續(xù)試用30天

    Oracle試用到期如何刪除注冊(cè)表繼續(xù)試用30天

    這篇文章主要介紹了Oracle試用到期如何刪除注冊(cè)表繼續(xù)試用30天,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Oracle EXP和IMP用法和介紹

    Oracle EXP和IMP用法和介紹

    正在看的ORACLE教程是:OracleEXP和IMP用法和介紹
    2007-03-03

最新評(píng)論