Oracle中如何創(chuàng)建和管理索引

這篇文章將為大家詳細(xì)講解有關(guān)Oracle 中如何創(chuàng)建和管理索引,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供尼元陽企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、html5、小程序制作等業(yè)務(wù)。10年已為尼元陽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

在 Oracle 數(shù)據(jù)庫中,存儲(chǔ)的每一行數(shù)據(jù)都有一個(gè) rowID 來標(biāo)識(shí)。當(dāng) Oracle 中存儲(chǔ)著大量的數(shù)據(jù)時(shí),意味著有大量的 rowID ,此時(shí)想要快速定位指定的 rowID ,就需要使用索引對(duì)象。

當(dāng)對(duì) Oracle 表執(zhí)行指定條件的查詢時(shí),常規(guī)的方法是將所有的記錄取出來,然后再把每一條記錄與查詢條件作對(duì)比,最后返回滿足條件的記錄。這樣操作不僅耗費(fèi)時(shí)間并耗費(fèi)資源。當(dāng)有了索引之后,只需要在索引中找到符合查詢條件的索引字段值,就可以通過保存在索引中的 rowID 快速找到表中對(duì)應(yīng)的記錄。

用戶可以根據(jù)情況不同創(chuàng)建多種類型的索引。按照索引的存儲(chǔ)方式將索引分為 B 樹索引、位圖索引、反向索引和基于函數(shù)的索引。創(chuàng)建索引時(shí)需要注意以下幾點(diǎn):

l 索引應(yīng)該建立在 where 子句頻繁引用、排序以及分組的列上,如果選擇的列不合適將無法提升查詢速度;

l 限制索引的個(gè)數(shù)。索引只要提升查詢速度,但會(huì)降低 DML 操作的速度;

l 指定索引塊空間的使用參數(shù)?;诒斫⑺饕龝r(shí), Oracle 會(huì)將相應(yīng)表添加到索引塊。為索引添加數(shù)據(jù)時(shí), Oracle 會(huì)按照 pctfree 參數(shù)在索引塊上預(yù)留部分空間。如果將來在表上執(zhí)行大量的 insert 操作,那么應(yīng)該在建立索引時(shí)設(shè)置較大的 pctfree ;

l 將表和索引部署到相同的表空間,可以簡化表空間的管理;將表和索引部署到不同的表空間,可以提高訪問性能( Oracle 能夠并行讀取不同硬盤的數(shù)據(jù));

Oracle如何創(chuàng)建索引

在創(chuàng)建索引時(shí), Oracle 首先對(duì)將要簡歷索引的字段進(jìn)行排序,然后將排序后的字段值和對(duì)應(yīng)記錄的 rowID 存儲(chǔ)在索引段中。查詢時(shí),根據(jù)索引查詢指定條件的 rowID ,再根據(jù) rowID 提取數(shù)據(jù)行。

1) B 樹索引

B 樹索引時(shí) Oracle 最常用的索引類型(也是默認(rèn)類型),是以 B 樹結(jié)構(gòu)組織并存放索引數(shù)據(jù)。默認(rèn)情況下 B 樹索引中的數(shù)據(jù)是以升序方式排列的。 B 樹索引是由根塊、分支塊和葉塊組成。

例:為 emp 表的 deptno 列創(chuàng)建索引 index _ test

Create index index _ test on emp ( deptno )

Pctfree 25

Tablespace users ;

其中,子句 pctfree 指定為將來 insert 操作所預(yù)留的空閑空間,子句 tablespace 指定索引段所在的表空間

2) 位圖索引

當(dāng)需創(chuàng)建索引列包含的取值太少時(shí),如對(duì)性別列創(chuàng)建索引,取值只能是“男”或者“女”,使用 B 樹索引取出來的值任然太多,失去了索引的意義。這種情況需要使用位數(shù)索引,

例:

Create bitmap index index _ test

On emp ( salary )

Tablespace users ;

注:初始化參數(shù) create _ bitmap _ area _ size 用于指定建立位圖索引時(shí)分配的位圖區(qū)大小,默認(rèn)值為8 MB ,該參數(shù)越大建立位圖索引的速度越快。修改該參數(shù)語句為:

Alter system set create _ bitmap _ area _ size =8388608

Scope = spfile ;

修改后需要重新啟動(dòng)數(shù)據(jù)庫方可生效;

3) 反向鍵索引

在單調(diào)遞增的列上使用 B 樹索引時(shí),若用戶對(duì)表中數(shù)據(jù)做了刪除操作,將導(dǎo)致對(duì)某一邊的葉子節(jié)點(diǎn)的大量占用。 Oracle 提供另一種索引機(jī)制,及反向鍵索引,它可以將添加的數(shù)據(jù)隨機(jī)分散到索引中。反向鍵索引是一種特殊的 B 樹索引,在順序遞增數(shù)列上建立索引非常有用。反向鍵索引在原理和存儲(chǔ)結(jié)構(gòu)方面和 B 樹索引類似。當(dāng)用戶插入記錄時(shí),將列值進(jìn)行反向操作后進(jìn)行索引,此時(shí)數(shù)據(jù)不在是遞增的,所以新數(shù)據(jù)在值的范圍上分布通常比原來的有序樹更均勻。

例:

Create index index _ test

On emp ( deptno ) reverse

Tablespace users ;

如果該列上已經(jīng)建立了 B 樹索引,那么可以將其修改為反向鍵索引:

Alter index index _ test

Rebulid reverse ;’

4) 基于函數(shù)的索引

用戶在使用數(shù)據(jù)庫時(shí),最常遇到的問題是大小寫字符敏感。例如在 emp 表中 Job 字段有 MANAGER 的記錄,當(dāng)用戶使用小寫搜索時(shí)則無法找到該記錄,只能通過函數(shù) upper 對(duì)應(yīng)進(jìn)行轉(zhuǎn)換,在使用轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行檢查。但是這樣查詢是,即便 job 列有普通索引, Oracle 也會(huì)執(zhí)行全表搜索,并為遇到的各個(gè)行計(jì)算 upper 函數(shù)。這種情況可以使用建立基于函數(shù)的索引,通常只是常規(guī) B 樹索引,但是它存放的數(shù)據(jù)是由表中數(shù)據(jù)應(yīng)用函數(shù)后得到的,而不是直接存放表中的數(shù)據(jù)本身。

如果習(xí)慣使用小寫字符串,可以創(chuàng)建如下索引:

Create index index _ test

On emp ( lower ( job ));

修改索引

修改索引使用 alter index 完成。

為表建立索引后,隨著對(duì)表不斷進(jìn)行更替、插入和刪除動(dòng)作,索引中國會(huì)產(chǎn)生越來越多的存儲(chǔ)碎片,導(dǎo)致索引工作效率降低。這是可以采取重建索引和合并索引清除碎片。合并索引只是將 B 樹中葉子節(jié)點(diǎn)的存儲(chǔ)碎片合并在一起,并不會(huì)改變索引的物流組織結(jié)構(gòu)。

合并索引:

Alter index index _ test

Coalesce deallocate unused ;

重建索引:

Alter index index _ test rebuild

Tablespace user 1;

重建索引時(shí)可以更改索引的類型,存儲(chǔ)表空間等

刪除索引

刪除索引使用 drop index 語句。當(dāng)索引過于碎片化,或者不經(jīng)常被用到時(shí),既可以刪除索引:

Drop index index _ test ;

注:刪除表是也會(huì)刪除其相應(yīng)的索引。

顯示索引信息

為了顯示索引的信息, Oracle 提供了一系列數(shù)據(jù)字典視圖,使用戶了解索引的各方面信息。

1) 顯示表的所有索引:顯示 emp 的所有索引

Select * from dba _ indexs where owner =’ EMP ’

2) 顯示索引列:顯示 index _ test 所使用的索引列:

Select * from user _ ind _ columns where index _ name =’ INDEX _ TEST ’

3) 顯示索引位置及大小

Select * from user _ segments where segment _ name =’ INDEX _ TEST ’

4) 顯示函數(shù)索引

Select * from user _ ind _ expressions where index _ name =’ INDEX _ TEST ’

關(guān)于Oracle 中如何創(chuàng)建和管理索引就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:Oracle中如何創(chuàng)建和管理索引
鏈接地址:http://muchs.cn/article32/pidisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司