當前位置:首頁 » 操作系統 » oracle資料庫索引

oracle資料庫索引

發布時間: 2022-04-11 08:20:22

⑴ 在oracle中如何創建聚集索引

對三個欄位建立索引:
create index Stuname on student(name);
create index Stusex on student(sex);
create index Stugrade on student(grade);
注意的問題,考慮是不是要建立唯一索引(unique),如果有學號的話,可以考慮建立唯一索引引。
再就是對經常查詢,但又相對穩定的可以建立聚簇索引,提高查詢效率

⑵ oracle 資料庫如何建立索引 如何用索引

創建索引語法:

CREATE [UNIQUE] | [BITMAP] INDEX index_name

--unique表示唯一索引

ON table_name([column1 [ASC|DESC],column2

--bitmap,創建點陣圖索引

[ASC|DESC],…] | [express])[TABLESPACE tablespace_name][PCTFREE n1]

--指定索引在數據塊中空閑空間

[STORAGE (INITIAL n2)][NOLOGGING]

--表示創建和重建索引時允許對表做DML操作,默認情況下不應該使用

[NOLINE][NOSORT];

--表示創建索引時不進行排序,默認不適用,如果數據已經是按照該索引順序排列的可以使用

(2)oracle資料庫索引擴展閱讀:

1、如果有兩個或者以上的索引,其中有一個唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引

2、至少要包含組合索引的第一列(即如果索引建立在多個列上,只有它的第一個列被where子句引用時,優化器才會使用該索引)

3、小表不要簡歷索引

4、對於基數大的列適合建立B樹索引,對於基數小的列適合簡歷點陣圖索引

5、列中有很多空值,但經常查詢該列上非空記錄時應該建立索引

6、經常進行連接查詢的列應該創建索引

7、使用create index時要將最常查詢的列放在最前面

8、LONG(可變長字元串數據,最長2G)和LONG RAW(可變長二進制數據,最長2G)列不能創建索引

9、限製表中索引的數量(創建索引耗費時間,並且隨數據量的增大而增大;索引會佔用物理空間;當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度)

⑶ Oracle資料庫中的「索引」怎麼理解

假設我們有200條數據,不建索引的情況下,你要找一個數,比如20,你要找200次,然後返回你找到的那次。但是如果有索引,你就知道先找1--100之間的,然後再找1--50之間的,然後找1--25之間的,大大縮小的查找的次數,加快了查詢。理解?

⑷ oracle怎麼通過索引查詢數據語句

oracle對於資料庫中的表信息,存儲在系統表中。查詢已創建好的表索引,可通過相應的sql語句到相應的表中進行快捷的查詢:
1. 根據表名,查詢一張表的索引

select * from user_indexes where table_name=upper('表名');

2. 根據索引號,查詢表索引欄位

select * from user_ind_columns where index_name=('索引名');

3.根據索引名,查詢創建索引的語句

select dbms_metadata.get_ddl('INDEX','索引名', ['用戶名']) from al ; --['用戶名']可省,默認為登錄用戶

PS:dbms_metadata.get_ddl還可以得到建表語句,如:

SELECT DBMS_METADATA.GET_DDL('TABLE','表名', ['用戶名']) FROM DUAL ; //取單個表的建表語句,['用戶名']可不輸入,默認為登錄用戶
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u; //取用戶下所有表的建表語句

當然,也可以用pl/sql developer工具來查看相關的表的各種信息。

⑸ 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資料庫中的最常用的索引有哪些

1. b-tree索引
Oracle資料庫中最常見的索引類型是b-tree索引,也就是B-樹索引,以其同名的計算科學結構命名。CREATE
INDEX語句時,默認就是在創建b-tree索引。沒有特別規定可用於任何情況。
2. 點陣圖索引(bitmap index)
點陣圖索引特定於該列只有幾個枚舉值的情況,比如性別欄位,標示欄位比如只有0和1的情況。
3. 基於函數的索引
比如經常對某個欄位做查詢的時候是帶函數操作的,那麼此時建一個函數索引就有價值了。

⑺ Oracle索引的概念及作用

在oracle中,索引是一種供伺服器在表中快速查找一個行的資料庫結構。在資料庫中建立索引主要有以下作用。(1)快速存取數據。(2)既可以改善資料庫性能,又可以保證列值的唯一性。(3)實現表與表之間的參照完整性(4)在使用orderby、groupby子句進行數據檢索時,利用索引可以減少排序和分組的時間。

⑻ 如何合理創建Oracle資料庫索引的3個要求

如何合理創建Oracle資料庫索引的3個要求:
在Oracle資料庫中,創建索引雖然比較簡單。但是要合理的創建索引則比較困難了。筆者認為,在創建索引時要做到三個適當,即在適當的表上、適當的列上創建適當數量的索引。雖然這可以通過一句話來概括優化的索引的基本准則,但是要做到這一點的話,需要資料庫管理員做出很大的努力。具體的來說,要做到這個三個適當有如下幾個要求。
一、 根據表的大小來創建索引。
雖然給表創建索引,可以提高查詢的效率。但是資料庫管理員需要注意的是,索引也需要一定的開銷的。為此並不是說給所有的表都創建索引,那麼就可以提高資料庫的性能。這個認識是錯誤的。恰恰相反,如果不管三七二十一,給所有的表都創建了索引,那麼其反而會給資料庫的性能造成負面的影響。因為此時濫用索引的開銷可能已經遠遠大於由此帶來的性能方面的收益。所以筆者認為,資料庫管理員首先需要做到,為合適的表來建立索引,而不是為所有的表建立索引。
一般來說,不需要為比較小的表創建索引。如在一個ERP系統的資料庫中,department表用來存儲企業部門的信息。一般企業的部分也就十幾個,最多不會超過一百個。這100條記錄對於人來說,可能算是比較多了。但是對於計算機來說,這給他塞塞牙縫都還不夠。所以,對類似的小表沒有必要建立索引。因為即使建立了索引,其性能也不會得到很大的改善。相反索引建立的開銷,如維護成本等等,要比這個要大。也就是說,付出的要比得到的多,顯然違反常理。
另外,就是對於超大的表,也不一定要建立索引。有些表雖然比較大,記錄數量非常的多。但是此時為這個表建立索引並一定的合適。如系統中有一張表,其主要用來保存資料庫中的一些變更信息。往往這些信息只給資料庫管理員使用。此時為這張表建立索引的話,反而不合適。因為這張表很少用到,只有在出問題的時候才需要查看。其次其即使查看,需要查詢的紀錄也不會很多,可能就是最近一周的更新記錄等等。對於對於一些超大的表,建立索引有時候往往不能夠達到預計的效果。而且在打表上建立索引,其索引的開銷要比普通的表大的多。那麼到底是否給大表建立索引呢?筆者認為,主要是看兩個方面的內容。首先是需要關注一下,在這張大表中經常需要查詢的記錄數量。一般來說,如果經常需要查詢的數據不超過10%到15%的話,那就沒有必要為其建立索引的必要。因為此時建立索引的開銷可能要比性能的改善大的多。這個比例只是一個經驗的數據。如果資料庫管理員需要得出一個比較精確的結論,那麼就需要進行測試分析。即資料庫管理員需要測試一下全表掃描的時間,看看其是否比建立索引後的查詢時間要長或者短。如果是長的話,則說明有建立索引的必要。但是如果沒有的話,則說明還是全表掃描速度來的快。此時也就沒有必要建立索引了。
總之,在考慮是否該為表建立索引時,一般來說小表沒有建立索引的必要。而對於打表的話,則需要進行實際情況實際分析。簡單一點的,可以根據大致的比率來確定。如果要精確一點的,則可以進行全表掃描性能分析,以判斷建立索引後是否真的如預期那樣改善了資料庫性能。
二、 根據列的特徵來創建索引。
列的特點不同,索引創建的效果也不同。資料庫管理員需要了解為哪些列創建索引可以起到事倍功半的效果。同時也需要了解為哪些列創建索引反而起到的是事倍功半的效果。這有利於他們了解到底給為怎麼樣的欄位建立索引。
根據筆者的經驗,往往為如下特徵的列創建索引能夠起到比較明顯的效果。如對於一些重復內容比較少的列,特別是對於那些定義了唯一約束的列。在這些列上建立索引,往往可以起到非常不錯的效果。如對於一些null值的列與非Null值的列混合情況下,如果用戶需要經常查詢所有的非Null值記錄的列,則最好為其設置索引。如果經常需要多表連接查詢,在用與連接的列上設置索引可以達到事半功倍的效果。
可見,索引設置的是否恰當,不僅跟資料庫設計架構有關,而且還跟企業的經濟業務相關。為此,對於一些套裝軟體,雖然一開始資料庫管理員已經做了索引的優化工作。但是隨著後來經濟數據的增加,這個索引的效果會越來越打折扣。這主要是因為記錄的表化影響到了索引優化的效果。所以筆者建議各位資料庫管理員,即使採用的是大牌軟體公司的套裝軟體,也需要隔一段時間,如一年,對資料庫的索引進行優化。該去掉的去掉,該調整的調整,以提高資料庫的性能。
如在資料庫中有一張表是用來保存用戶信息的。其中有個欄位身份證號碼,這是一個唯一的欄位。在資料庫設計時,給這個欄位創建了索引。但是當這個資料庫投入使用之後,用戶不怎麼輸入用戶的身份證號碼。而且平時也基本不按這個號碼來進行查詢。當記錄月來月多時,這個身份證號碼上的索引欄位不但不能夠改善資料庫的查詢性能,反而成了雞肋。對於這些有很多NULL值的列,而且不會經常查詢所有的非NULL值記錄的列,資料庫管理員要下決心,即使清除這些列上的索引。
所以說索引的優化與調整是一個動態的過程,並不是說資料庫設計好之後就不需要經過調整。資料庫管理員往往需要根據記錄的變化情況,來進行適當的變更。以提高索引的效果。
三、 在一個表上創建多少索引合適?
雖然說,在表上創建索引的數量沒有限制,但是決不是越多越好。也就是說,在創建索引這項事情上,1+1〉2往往不成立。有時候,創建索引越多,其可能會得到適得其反的效果。那麼在一個表上,到底給創建多少索引合適呢?這個沒有一個明確的標准。而是需要資料庫管理員根據實際的用途以及資料庫中記錄的情況,來進行判斷。
通常來說,表的索引越多,其查詢的速度也就越快。但是,表的更新速度則會降低。這主要是因為表的更新(如往表中插入一條記錄)速度,反而隨著索引的增加而增加。這主要是因為,在更新記錄的同時需要更新相關的索引信息。為此,到底在表中創建多少索引合適,就需要在這個更新速度與查詢速度之間取得一個均衡點。如對於一些數據倉庫或者決策型資料庫系統,其主要用來進行查詢。相關的記錄往往是在資料庫初始化的時候倒入。此時,設置的索引多一點,可以提高資料庫的查詢性能。同時因為記錄不怎麼更新,所以索引比較多的情況下,也不會影響到更新的速度。即使在起初的時候需要導入大量的數據,此時也可以先將索引禁用掉。等到數據導入完畢後,再啟用索引。可以通過這種方式來減少索引對數據更新的影響。相反,如果那些表中經常需要更新記錄,如一些事務型的應用系統,數據更新操作是家常便飯的事情。此時如果在一張表中建立過多的索引,則會影響到更新的速度。由於更新操作比較頻繁,所以對其的負面影響,要比查詢效率提升要大的多。此時就需要限制索引的數量,只在一些必要的欄位上建立索引。
筆者在平時資料庫優化時,往往會根據這些表的用途來為列設置索引。可以查詢相關的動態視圖,看看對於這張表的操作,是更新操作(包括更新、刪除、插入等等)占的比例大,還是查詢操作占的比例大。當過多的索引已經影響到更新操作的速度時,則資料庫管理員就需要先禁用某些索引,以提高資料庫的性能。
總之,在適當的表、適當的列上建立適當的索引。這一句話包含的意思有很多,以上內容只是一部分內容。俗話說,師傅領進門,修行靠自身。筆者在這里指能夠點到為止。一些具體的索引優化內容還是需要各位讀者在日常工作中去體會與總結

⑼ oracle中,索引是干什麼用的

索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據;Oracle存儲索引的數據結構是B*樹,點陣圖索引也是如此,只不過是葉子節點不同B*數索引;索引由根節點、分支節點和葉子節點組成,上級索引塊包含下級索引塊的索引數據,葉節點包含索引數據和確定行實際位置的rowid。
使用索引的目的:
1、加快查詢速度
2、減少I/O操作
3、消除磁碟排序
4、何時使用索引
5、查詢返回的記錄數
6、排序表<40%
7、非排序表 <7%
8、表的碎片較多(頻繁增加、刪除)

⑽ oracle資料庫索引種類,分別什麼情況下使用

1. b-tree索引
Oracle資料庫中最常見的索引類型是b-tree索引,也就是B-樹索引,以其同名的計算科學結構命名。CREATE
INDEX語句時,默認就是在創建b-tree索引。沒有特別規定可用於任何情況。
2. 點陣圖索引(bitmap index)
點陣圖索引特定於該列只有幾個枚舉值的情況,比如性別欄位,標示欄位比如只有0和1的情況。
3. 基於函數的索引
比如經常對某個欄位做查詢的時候是帶函數操作的,那麼此時建一個函數索引就有價值了。
4. 分區索引和全局索引
這2個是用於分區表的時候。前者是分區內索引,後者是全表索引
5. 反向索引(REVERSE)
這個索引不常見,但是特定情況特別有效,比如一個varchar(5)位欄位(員工編號)含值
(10001,10002,10033,10005,10016..)
這種情況默認索引分布過於密集,不能利用好伺服器的並行
但是反向之後10001,20001,33001,50001,61001就有了一個很好的分布,能高效的利用好並行運算。
6.HASH索引
HASH索引可能是訪問資料庫中數據的最快方法,但它也有自身的缺點。集群鍵上不同值的數目必須在創建HASH集群之前就要知道。需要在創建HASH集群的時候指定這個值。使用HASH索引必須要使用HASH集群。

熱點內容
pyinstaller如何自定義配置打包 發布:2024-04-16 22:51:54 瀏覽:198
怎麼設置建行登陸密碼 發布:2024-04-16 22:49:58 瀏覽:57
大型激光編程 發布:2024-04-16 22:41:04 瀏覽:535
手機解壓不了游戲 發布:2024-04-16 22:25:04 瀏覽:148
職場簡單編程 發布:2024-04-16 21:58:30 瀏覽:498
零食劇情腳本 發布:2024-04-16 20:59:56 瀏覽:82
我的世界粘土伺服器戰牆 發布:2024-04-16 20:55:31 瀏覽:683
sql字元串的長度 發布:2024-04-16 20:50:18 瀏覽:186
glc配置一般為什麼那麼貴 發布:2024-04-16 20:49:35 瀏覽:270
如何開啟共享電腦伺服器 發布:2024-04-16 20:21:06 瀏覽:660