濮阳杆衣贸易有限公司

主頁 > 知識庫 > oracle數(shù)據(jù)庫關于索引建立及使用的詳細介紹

oracle數(shù)據(jù)庫關于索引建立及使用的詳細介紹

熱門標簽:地圖標注效果的制作 網(wǎng)貸外呼系統(tǒng)合法嗎 地圖標注坐標圖標 杭州網(wǎng)絡外呼系統(tǒng)運營商 安陽企業(yè)電銷機器人供應商 電銷套路機器人 汽車4s店百度地圖標注店 鶴壁電話機器人價格 手機地圖標注門店

索引的說明

索引是與表相關的一個可選結構,在邏輯上和物理上都獨立于表的數(shù)據(jù),索引能優(yōu)化查詢,不能優(yōu)化DML操作,Oracle自動維護索引,頻繁的DML操作反而會引起大量的索引維護。

如果SQL語句僅訪問被索引的列,那么數(shù)據(jù)庫只需從索引中讀取數(shù)據(jù),而不用讀取表。

如果該語句同時還要訪問除索引列之外的列,那么,數(shù)據(jù)庫會使用rowid來查找表中的行。

通常,為檢索表數(shù)據(jù),數(shù)據(jù)庫以交替方式先讀取索引塊,然后讀取相應的表塊。

索引的目的

主要是減少IO,這是本質,這樣才能體現(xiàn)索引的效率。

1大表,返回的行數(shù)5%

2經(jīng)常使用where子句查詢的列

3離散度高的列

4更新鍵值代價低

5邏輯AND、OR效率高

6查看索引在建在那表、列:

select * from user_indexes;

select * from user_ind_columns;

索引結構

oracle索引分為兩大類結構:

B樹索引結構balance>

類似于字典查詢,最后到leaf block ,存的是數(shù)據(jù)rowid和數(shù)據(jù)項

1.葉塊之間使用雙向鏈連接,為了可以范圍查詢。
2.刪除表行時,索引葉塊也會更新,但只是邏輯更改,并不做物理的刪除葉塊。
3.索引葉塊不保存表行鍵值null的信息。

位圖索引結構bitmap>

在oracle中是根據(jù)rowid來定位記錄的,因此,我們需要引入start rowid和end rowid,通過start rowid ,end rowid 和二進制位的偏移,我們就可以非??焖俚挠嬎愠龆M制位所代表的表記錄rowid。位圖索引的最終邏輯結構如下圖:

我們稱每一單元的key ,startrowid,end rowid,bitmap>為一個位圖片段。當我們修改某一行數(shù)據(jù)的時候,我們需要鎖定該行列值所對應的位圖片段,如果我們進行的是更新操作,同時還會鎖定更新后新值所在的位圖片段。例如我們將列值從01修改為03,就需要同時鎖定01和03位圖片段,此時如果有其他用戶需要修改與01或者03關聯(lián)的表記錄上的索引字段,就會被阻塞,因此位圖索引不適合并發(fā)環(huán)境,在并發(fā)環(huán)境下可能會造成大量事務的阻塞。
我們一般在表數(shù)據(jù)離散度比較低的時候使用位圖索引,如t_doctor的empno值重復分布的比較多,則離散度比較低:create bitmap index job_bitmap on t_doctor(empno)

建立索引的方式

1.唯一索引:鍵值不重復

create unique index doctor_index on t_doctor(empno)

drop indexdoctor_index

2.一般索引:鍵值可重復

create index doctor_index on t_doctor(empno)

drop indexdoctor_index

3.復合索引:綁定了多個列

create index doctor_index ont_doctor(empno,job)

drop indexdoctor_index

4.反向索引:為避免平衡樹索引熱塊,如t_doctor表中empno開頭都是“7”,這樣構建索引樹的時候,很可能會把所有數(shù)據(jù)分配到一個塊里,使用反向索引,避免此類問題,使索引樹分布均勻

create index doctor_index ont_doctor(empno) reverse

drop indexdoctor_index

5.函數(shù)索引:查詢時必須用到這個函數(shù),才會使用到

create index func_index ont_doctor(lower(empno))

--select * from t_doctor where lower(empno) = 'lina'

drop indexfunc_index

6.壓縮索引:不常用

create index doctor_index ont_doctor(empno) compress

drop indexdoctor_index

7.升序降序索引:

create index doctor_index ont_doctor(empno desc, job asc)

drop indexdoctor_index

索引碎片問題

由于對基表做DML操作,導致索引表塊的自動更改操作,尤其是基表的delete操作會引起index表的index_entries的邏輯刪除,注意只有當一個索引塊中的全部index_entry都被刪除了,才會把這個索引塊刪除,索引對基表的delete、insert操作都會產(chǎn)生索引碎片問題。

在Oracle文檔里并沒有清晰的給出索引碎片的量化標準,Oracle建議通過Segment Advisor(段顧問)解決表和索引的碎片問題,如果你想自行解決,可以通過查看index_stats視圖,當以下三種情形之一發(fā)生時,說明積累的碎片應該整理了(僅供參考)。

查看執(zhí)行計劃:set autotrace traceonly explain;

分析索引列:

analyze index ind_1 validate structure;

select name,HEIGHT,PCT_USED,DEL_LF_ROWS/LF_ROWS from index_stats;

HEIGHT >=4 


 PCT_USED 50% 


DEL_LF_ROWS/LF_ROWS>0.2

alter index ind_1 rebuild [online] [tablespace name];

到此這篇關于oracle數(shù)據(jù)庫關于索引建立及使用的詳細介紹的文章就介紹到這了,更多相關oracle數(shù)據(jù)庫索引內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • oracle索引的測試實例代碼
  • Oracle Index索引無效的原因與解決方法
  • oracle使用索引與不使用索引的性能詳析
  • ORACLE檢查找出損壞索引(Corrupt Indexes)的方法詳解
  • Oracle復合索引與空值的索引使用問題小結
  • oracle分區(qū)索引的失效和重建代碼示例
  • Oracle關于重建索引爭論的總結
  • Oracle 分區(qū)索引介紹和實例演示
  • Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析
  • oracle索引總結

標簽:梧州 南陽 銀川 河源 柳州 泰安 焦作 酒泉

巨人網(wǎng)絡通訊聲明:本文標題《oracle數(shù)據(jù)庫關于索引建立及使用的詳細介紹》,本文關鍵詞  oracle,數(shù)據(jù)庫,關于,索引,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《oracle數(shù)據(jù)庫關于索引建立及使用的詳細介紹》相關的同類信息!
  • 本頁收集關于oracle數(shù)據(jù)庫關于索引建立及使用的詳細介紹的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    新竹市| 淮安市| 清河县| 延寿县| 盐城市| 泰和县| 桐乡市| 托里县| 洛扎县| 景东| 阳春市| 汤阴县| 天气| 拜泉县| 获嘉县| 麟游县| 霍邱县| 广安市| 凭祥市| 蒲江县| 乐东| 达拉特旗| 锦屏县| 若羌县| 秦安县| 义马市| 景德镇市| 武鸣县| 大同市| 英吉沙县| 龙井市| 辽源市| 徐汇区| 敦煌市| 洞口县| 宜黄县| 台安县| 舟曲县| 清河县| 加查县| 淳化县|