一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - oracle數據庫關于索引建立及使用的詳細介紹

oracle數據庫關于索引建立及使用的詳細介紹

2020-08-19 16:31學霸王先森 Oracle

這篇文章主要介紹了oracle數據庫關于索引建立及使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

索引的說明

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

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

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

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

索引的目的

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

1大表,返回的行數<5%

2經常使用where子句查詢的列

3離散度高的列

4更新鍵值代價低

5邏輯AND、OR效率高

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

?
1
2
3
select * from user_indexes;
 
select * from user_ind_columns;

索引結構

oracle索引分為兩大類結構:

B樹索引結構<balance>

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

oracle數據庫關于索引建立及使用的詳細介紹

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

位圖索引結構<bitmap>

在oracle中是根據rowid來定位記錄的,因此,我們需要引入start rowid和end rowid,通過start rowid ,end rowid 和二進制位的偏移,我們就可以非常快速的計算出二進制位所代表的表記錄rowid。位圖索引的最終邏輯結構如下圖:

oracle數據庫關于索引建立及使用的詳細介紹

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

建立索引的方式

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

?
1
2
3
create unique index doctor_index on t_doctor(empno)
 
drop indexdoctor_index

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

?
1
2
3
create index doctor_index on t_doctor(empno)
 
drop indexdoctor_index

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

?
1
2
3
create index doctor_index ont_doctor(empno,job)
 
drop indexdoctor_index

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

?
1
2
3
create index doctor_index ont_doctor(empno) reverse
 
drop indexdoctor_index

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

?
1
2
3
4
5
create index func_index ont_doctor(lower(empno))
 
--select * from t_doctor where lower(empno) = 'lina'
 
drop indexfunc_index

6.壓縮索引:不常用

?
1
2
3
create index doctor_index ont_doctor(empno) compress
 
drop indexdoctor_index

7.升序降序索引:

?
1
2
3
create index doctor_index ont_doctor(empno desc, job asc)
 
drop indexdoctor_index

索引碎片問題

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

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

查看執行計劃:set autotrace traceonly explain;

分析索引列:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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數據庫關于索引建立及使用的詳細介紹的文章就介紹到這了,更多相關oracle數據庫索引內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/Unlimited-Blade-Works/p/11303427.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好大好爽好涨太深了小喜 | 人与善交大片免费看 | 四虎影视在线看 | 91精品乱码一区二区三区 | 欧美精选欧美极品 | juliaann丝袜精品系列 | 小仙夜晚慰自催眠mp3护士篇 | 吉泽明步高清无码中文 | 亚洲日本va中文字幕 | 亚洲国产成人在人网站天堂 | 九九热这里只有精品2 | 草草免费观看视频在线 | 99久久免费国产精品热 | 无人在线高清免费看 | 96av视频在线观看 | 亚洲国产第一区二区香蕉日日 | 欧美一区二区不卡视频 | 小妇人电影免费完整观看2021 | 婚色阿花在线全文免费笔 | 99久久国产综合精品女不卡 | 久久九九久精品国产尤物 | 国产极品精频在线观看 | 国产精品久久久久一区二区三区 | 99热精品久久 | 亚洲国产精品综合福利专区 | 国产精品毛片高清在线完整版 | 黑帮大佬与我的365天2标清中文 | 精品亚洲欧美中文字幕在线看 | 九九热免费在线观看 | 无颜之月5集全免费看无删除 | 女仆色永久免费网站 | 网站色小妹 | 天天色国产 | 亚洲黄色免费在线观看 | 国语刺激对白勾搭视频在线观看 | 成人一区二区免费中文字幕 | 久久偷拍人 | 欧美特欧美特级一片 | 精品视频手机在线观看免费 | 99国产精品热久久久久久夜夜嗨 | 国产精品久久免费观看 |