最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年07月16日 15:50:41   作者:學(xué)霸王先森  
這篇文章主要介紹了oracle數(shù)據(jù)庫關(guān)于索引建立及使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

索引的說明

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

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

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

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

索引的目的

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

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

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

3離散度高的列

4更新鍵值代價低

5邏輯AND、OR效率高

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

select * from user_indexes;

select * from user_ind_columns;

索引結(jié)構(gòu)

oracle索引分為兩大類結(jié)構(gòu):

B樹索引結(jié)構(gòu)<balance>

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

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

位圖索引結(jié)構(gòu)<bitmap>

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

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

建立索引的方式

1.唯一索引:鍵值不重復(fù)

create unique index doctor_index on t_doctor(empno)

drop indexdoctor_index

2.一般索引:鍵值可重復(fù)

create index doctor_index on t_doctor(empno)

drop indexdoctor_index

3.復(fù)合索引:綁定了多個列

create index doctor_index ont_doctor(empno,job)

drop indexdoctor_index

4.反向索引:為避免平衡樹索引熱塊,如t_doctor表中empno開頭都是“7”,這樣構(gòu)建索引樹的時候,很可能會把所有數(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操作,導(dǎo)致索引表塊的自動更改操作,尤其是基表的delete操作會引起index表的index_entries的邏輯刪除,注意只有當(dāng)一個索引塊中的全部index_entry都被刪除了,才會把這個索引塊刪除,索引對基表的delete、insert操作都會產(chǎn)生索引碎片問題。

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

查看執(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];

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

相關(guān)文章

  • Navicat連接Oracle詳細(xì)教程

    Navicat連接Oracle詳細(xì)教程

    這篇文章主要介紹了Navicat連接Oracle詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • oracle 存儲過程和觸發(fā)器復(fù)制數(shù)據(jù)

    oracle 存儲過程和觸發(fā)器復(fù)制數(shù)據(jù)

    oracle 存儲過程和觸發(fā)器復(fù)制數(shù)據(jù)的代碼,需要的朋友可以參考下。
    2009-11-11
  • plsql與tsql的語法不同

    plsql與tsql的語法不同

    plsql與tsql的語法不同簡單整理,大家可以參考下。
    2009-09-09
  • oracle用imp導(dǎo)入dmp文件的方法

    oracle用imp導(dǎo)入dmp文件的方法

    這篇文章主要介紹了oracle用imp導(dǎo)入dmp文件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Oracle表分區(qū)詳解

    Oracle表分區(qū)詳解

    本文詳細(xì)講解了Oracle表分區(qū)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Oracle如何實現(xiàn)like多個值的查詢

    Oracle如何實現(xiàn)like多個值的查詢

    這篇文章主要給大家介紹了關(guān)于Oracle如何實現(xiàn)like多個值的查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Oracle 手動創(chuàng)建數(shù)據(jù)庫步驟詳解

    Oracle 手動創(chuàng)建數(shù)據(jù)庫步驟詳解

    本文給大家介紹oracle手動創(chuàng)建數(shù)據(jù)庫步驟,需要的朋友可以參考下
    2015-10-10
  • Oracle中3種常用的分頁查詢方法

    Oracle中3種常用的分頁查詢方法

    這篇文章主要給大家介紹了關(guān)于Oracle中3種常用的分頁查詢方法,分頁查詢就是把query到的結(jié)果集按頁顯示,比如一個結(jié)果集有1W行,每頁按100條數(shù)據(jù)庫,而你獲取了第2頁的結(jié)果集,需要的朋友可以參考下
    2023-09-09
  • 獲取Oracle表大小的三種方法

    獲取Oracle表大小的三種方法

    在 Oracle 數(shù)據(jù)庫中,獲取表的大小可以通過查詢數(shù)據(jù)字典視圖 DBA_SEGMENTS、USER_SEGMENTS 或 ALL_SEGMENTS,具體取決于你的權(quán)限范圍和需求,本文通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Oracle修改默認(rèn)的時間格式的四種方式

    Oracle修改默認(rèn)的時間格式的四種方式

    這篇文章主要介紹了Oracle修改默認(rèn)的時間格式的四種方式,默認(rèn)的日期和時間格式由參數(shù)NLS_DATE_FORMAT控制,如果需要修改默認(rèn)的時間格式,可以通過修改會話級別或系統(tǒng)級別的參數(shù)來實現(xiàn),需要的朋友可以參考下
    2024-06-06

最新評論

和平县| 陈巴尔虎旗| 米易县| 凌海市| 丽水市| 章丘市| 黔江区| 汝州市| 兰西县| 景东| 芒康县| 富宁县| 大姚县| 龙游县| 辽阳县| 米易县| 惠水县| 镇赉县| 宿迁市| 武鸣县| 师宗县| 甘谷县| 汨罗市| 江油市| 大同市| 遂川县| 横山县| 密山市| 福海县| 五寨县| 五原县| 喀喇| 江孜县| 龙里县| 元阳县| 桐城市| 金沙县| 方城县| 昌邑市| 定兴县| 馆陶县|