搜尋
首頁資料庫Oracleoracle有幾種索引

oracle中有六種索引:1、「B*」數索引,能根據鍵提供一行或一個行集的快速存取;2、點陣圖索引,適用於高度重複且通常只讀的資料;3、基於函數的索引,將一個函數計算得到的結果儲存在行的列中;4、應用域索引,是自己建構和儲存的索引;5、HASH索引,使用該索引必須要使用HASH群集;6、分區索引,把一個索引分成多個片段。

oracle有幾種索引

本教學操作環境:windows10系統、Oracle 12c版、Dell G3電腦。

oracle有幾種索引

Oracle 提供了多種不同類型的索引以供使用。簡單地說, Oracle 中包含如下索引:

1、 B* 樹索引

這些是我所說的「 傳統「 索引。到目前為止,這是 Oracle 和大多數其他資料庫中最常用的索引。 

B* 樹的構造類似於二元樹,能根據鍵提供一行或一個行集的快速訪問,通常只需很少的讀取操作就能找到正確的行。不過,要注意重要的一點, 」 B* 樹 「 中的 」 B 「 不代表二元( binary ),而代表平衡( b alanced )。 B* 樹索引並不是一顆二元樹,這一點在介紹如何在磁碟上物理地儲存 B* 樹時就會了解到。 B* 樹索引有以下子類型:

索引組織表( index organized table ):索引組織表以 B* 樹結構儲存。堆表的資料行是以一種無組織的方式儲存的(只要有可用的空間,就可以放資料),而 IOT 與之不同, IOT 中的資料要按主鍵的順序儲存和排序。對應用程式來說, IOT 表現得與 “ 常規 “ 表並無二致;需要使用 SQL 來正確地存取 IOT 。 IOT 對資訊取得、空間系統和 OLAP 應用最有用。 IOT 在上一章已經詳細討論過。

B*樹聚簇索引( B*tree cluster index )這些是傳統 B* 樹索引的一個變體(只是稍有變化)。 B* 樹叢集索引用於對叢集鍵建立索引(見第 11. 章中 「 索引叢集表 「 一節),所以這一章不再討論。在傳統 B* 樹中 ,鍵都指向一行;而 B* 樹叢集不同,一個叢集鍵會指向一個區塊,其中包含與這個叢集鍵相關的多行。

降序索引( descending index ):降序索引允許資料在索引結構中按 “ 從大到小 “ 的順序(降序)排序,而不是按 ” 從小到大 “ 的順序(升序)排序。我們會解釋為什麼降序索引很重要,並說明降序索引如何運作。

反向鍵索引( reverse key index ):這也是 B* 樹索引,只不過鍵中的位元組會 “ 反轉 “ 。利用反向鍵索引,如果索引中填入的是遞增的值,索引條目在索引中可以得到更均勻的分佈。例如,如果使用一個序列來產生主鍵,這個序列將產生諸如 987500 、 987501 、 987502 等值。這些值是順序的,所以倘若使用一 個傳統的 B* 樹索引,這些值就可能放在同一個右側塊上,這就加劇了對這一塊的競爭。利用反向鍵, Oracl e則會邏輯地對 205789 、 105789 、 005789 等建立索引。 Oracle 將資料放在索引中之前,將先 把所儲存資料的位元組反轉,這樣原來可能在索引中相鄰放置的值在位元組反轉之後就會相距很遠。透過反轉字節,對索引的插入就會分佈到多個區塊上。

2、 點陣圖索引( bitmap index )

#在一顆B* 樹中,通常索引條目和行之間存在一種一對一的關係:一個索引條目就指向一行。而對於點陣圖索引,一個索引條目則使用一個位圖同時指向多行。點陣圖索引適用於高度重複且通常只讀的資料(高度重複是指相對於表中的總行數,資料只有很少的幾個不同值)。考慮在一 個有 100 萬行的表格中,每個欄位只有 3 個可取值: Y 、 N 和 NULL 。舉例來說,如果你需要頻繁地統計多少行有值Y ,這就很適合建立位圖索引。不過並不是說如果這個表中某一列有 11.000 個不同的值就不能建立點陣圖索引,這一列當然也可以建立 位圖索引。在一個 OLTP 資料庫中,由於存在並發性相關的問題,所以不能考慮使用點陣圖索引(後面我們會討論這一點)。注意,點陣圖索引要求使用 Oracle 企業版或個人版。

位元圖聯結索引( bitmap join index ):這為索引結構(而非表)中的資料提供了一種逆規範化的 方法。例如,請考慮簡單的 EMP 和 DEPT 表。有人可能會問這樣一個問題: “ 多少人在位於波士頓的部門工作?“ EMP 有一個指向DEPT 的外鍵,要想統計LOC 值為Boston 的部門中的員工人數,通常必須完成表聯結,將LOC列聯結至EMP 記錄來回答這個問題。透過使用位圖聯結索引,則可以在 EMP 表上對 LOC 資料列建立索引 。

3、 基於函數的索引( function-based index )

這些就是B* 樹索引或位圖索引,它將一個函數計算得到的結果儲存在行的列中,而不是儲存列資料本身。可以把基於函數的索引看作一個虛擬列(或衍生列)上的索引,換句話說,這個列並不是實體儲存在表中。基於函數的索引可以用來加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 這樣的查詢,因為值 FUNCTION(DATABASE_COLUMN) 已經事先計算並儲存在索引中。

4、 應用程式域索引( application domain index )

應用程式域索引是你自己建立和儲存的索引,可能儲存在Oracle中,也可能在Oracle 之外。你要告訴優化器索引的選擇性如何,以及執行的開銷有多大,優化器會根據你提供的資訊來決定是否使用你的索引。 Oracle 文字索引就是應用域索引的一個例子;你也可以 以使用建構 Oracle 文字索引所使用的工具來建立自己的索引。需要指出,這裡建立的 “ 索引 “ 不需要使用傳統的索引結構。例如, Oracle 文字索引就使用了一組表格來實現其索引概念。

5、HASH索引

使用HASH索引必須要使用HASH群集。建立一個群集或HASH群集的同時,也定義了一個群集鍵。這個鍵告訴Oracle如何在群集上儲存表。在儲存資料時,所有與這個群集鍵相關的行都被儲存在一個資料庫區塊上。如果資料都儲存在同一個資料庫區塊上,並且使用了HASH索引,Oracle就可以透過執行一個HASH函數和I/O來存取資料-而透過適用一個二元高度為4的B-樹索引來存取數據,則需要在檢索數據時使用4個I/O。

技巧:HASH索引在有限制條件(需要指定一個確定的值而不是一個值範圍)的情況下非常有用。

6、分區索引

分區索引就是簡單地把一個索引分成多個片斷,這樣可以存取更小的片斷,並且可以把這些片斷分別存放在不同的硬碟上(避免I/O問題)。 B-數索引和點陣圖索引都可以被分區,HASH索引不可以被分區。

有兩種類型的分割索引:本機分割索引和全域分割索引。每個類型都有兩個子類型,有前綴索引和無前綴索引。如果使用了位圖索引就必須是本機索引。

把索引分割區最主要的原因是可以減少所需讀取的索引的大小,另外把分割區放在不同的表空間中可以提高分割區的可用性和可靠性。

推薦教學:《Oracle影片教學

以上是oracle有幾種索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境