Oracle索引事理

2022-08-29 13:45:22 字數 2850 閱讀 3569

下面的盤查縱然在cust_rating列有乙個索引,盤查語句依舊實施一次全表掃瞄。

select cust_id,cust_name

from customers

where cust_rating <> 'aa';

把下面的語句改成如下的盤查語句,這樣,在給與基於劃定禮貌的

優化器而不是基於**的優化器(更智慧型)時,將會運用索引。

select cust_id,cust_name

from customers

where cust_rating < 'aa' or cust_rating > 'aa';

奇怪留意:經過程序把不即是操作符改成or前提,就可以運用索引,以防止全表掃瞄。

from emp

where trunc(hiredate)='01-may-81';

把下面的語句改成下面的語句,這樣就可以經過程序索引舉辦查詢。

select empno,ename,deptno

from emp

where hiredate<(to_date('01-may-81') 0.9999);

4.4 對照不婚配的資料典範

對照不婚配的資料典範也是對照難於發明的功能成就之一。

留意下面盤查的例子,account_number是乙個varchar2典範,

在account_number欄位上有索引。下面的語句將實施全表掃瞄。

select bank_name,address,city,state,zip

from banks

where account_number = 990354;

oracle可以自動把where子句釀成to_number(account_number)=990354,這樣就限定了

索引的運用,改成下面的盤查就可以運用索引:

select bank_name,address,city,state,zip

from banks

where account_number ='990354';

奇怪留意:不婚配的資料典範之間對照會讓oracle自動限定索引的運用,

縱然對這個盤查實施explain plan也不克不及讓您大白為什麼做了一次「全表掃瞄」。

[5] 選擇性

運用user_indexes檢視,該檢視中表現了乙個distinct_keys列。對照一下唯一鍵的數目和表中的行數,就可以判定索引的選擇性。選擇性越高,索引前往的資料就越少。

[6] 糾集因子(clustering factor)

clustering factor位於user_indexes檢視中。該列反響反映了資料相干於已索引的列能否顯得有序。若是clustering factor列的值接近於索引中的樹葉塊(leaf block)的數目,表中的資料就越有序。若是它的值接近於表中的行數,則表中的資料就不是很有序。

[7] 二元高度(binary height)

索引的二元高度對把rowid前往給使用者程序時所要求的i/o量起到關鍵感化。在對乙個索引舉辦說明後,可以經過程序盤查dba_indexes的b- level列檢察它的二元高度。二元高度主要隨著表的鉅細以及被索引的列中值的領域的狹窄水平而變革。索引上若是有少量被刪除的行,它的二元高度也會增加。更新索引列也類似於刪除操作,因為它增加了已刪除鍵的數目。重建索引年夜概會低潮二元高度。

[8] 快速全域性掃瞄

在oracle7.3後就可以運用快速全域性掃瞄(fast full scan)這個選項。這個選項許諾oracle實施乙個全域性索引掃瞄操作。快速全域性掃瞄讀取b-樹索引上悉數樹葉塊。初始化檔案中的 db_file_multiblock_read_count引數可以控制同時被讀取的塊的數目。

[9] 騰躍式掃瞄

從oracle9i初步,索引騰躍式掃瞄特性可以許諾優化器運用組合索引,縱然索引的前導列沒有出現在where子句中。索引騰躍式掃瞄比全索引掃瞄要快的多。下面的遞次清單表現出功能的差別:

create index skip1 on emp5(job,empno);

index created.

select count(*)

from emp5

where empno=7900;

elapsed:00:00:03.13

execution plan

0 select statement optimizer=choose(cost=4 card=1 bytes=5)

1 0 sort(aggregate)

2 1 index(fast full scan) of 'skip1'(non-unique)

statistics

6826 consistent gets

6819 physical reads

select /* index(emp5 skip1)*/ count(*)

from emp5

where empno=7900;

elapsed:00:00:00.56

execution plan

0 select statement optimizer=choose(cost=6 card=1 bytes=5)

1 0 sort(aggregate)

2 1 index(skip scan) of 'skip1'(non-unique)

statistics

21 consistent gets

17 physical reads

[10] 索引的典範

b-樹索引

位圖索引

hash索引

索引編排表

反轉鍵索引

基於函式的索引

分割槽索引

本地和全域性索引

Oracle索引 索引型別

oracle 提供了多種不同型別的索引以供使用。簡單地說,oracle 中包括如下索引 b 樹索引 這些是我所說的 傳統 索引。到目前為止,這是 oracle 和大多數其他資料庫中最常用的索引。b 樹的構造類似於二叉樹,能根據鍵提供一行或乙個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過...

oracle 索引 之B TREE 索引

索引是oracle裡面的乙個非常重要的知識,oracle10g中索引可以分為以下 b tree indexes b tree cluster indexes hash cluster indexes reverse key indexes bitmap indexes bitmap join ind...

oracle索引 一 索引建立

索引就是為了加快查詢的速度,特高我們開發專案的效能,利用的原理就是減少io流 優點 1.索引就是為了加快查詢速度,所以好的索引的查詢速度快 2.在索引插敘過程中,會對資料進行排序,減少排序時間,這個在分組或者排序操作中是很有用的.3.加快表和表之間的聯絡.4.通過建立唯一性索引,可以保證資料庫表中每...