標籤:
一、索引簡介
1、索引相當於目錄
2、索引是通過一組排序後的索引鍵來取代預設的全表掃描檢索方式,從而提高檢索效率。
3、索引的建立要適度,多了會影響增刪改的效率,少了會影響查詢的效率,索引最好建立在取值分散的列上,避免對同一張表建立過多的索引
4、索引的使用對使用者來說是透明的,由系統來決定什麼時候使用索引。
5、Oracle支援多種類型的索引,可以按列的多少、索引值是否唯一和索引資料的組織形式對索引進行分類,以滿足各種表和查詢條件的要求。(請見附件)
a. 單列索引和複合索引
b.B樹索引(create index時預設的類型)
B樹索引中所有葉子節點都具有相同的深度,所以不管查詢條件如何,查詢速度基本相同。另B樹索引能夠適應各種查詢條件,包括精確查詢、模糊查詢和比較查詢
--Unique 唯一索引 值唯一,但允許存在null,主鍵預設存在唯一索引,但列不能為null
--Non-Unique:非唯一索引,其索引值可以重複,允許為NULL。預設情況下,Oracle建立的索引是非唯一索引
--Reverse Key:反向關鍵字索引。通過在建立索引時指定“REVERSE”關鍵字,可以建立反向關鍵字索引,被索引的每個資料列中的資料都是反向儲存
的,但仍然保持原來資料列的次序
c.位元影像索引(對列值範圍少,如性別 政治面貌適用,而不是預設的B樹索引)
c.函數索引
當需要經常訪問一些函數或運算式時,可以將其儲存在索引中,當下次訪問時,由於該值已經計算出來了,因此,可以大大提高那些在WHERE子句中包含該函數或
運算式的查詢操作的速度;
函數索引既可以使用B樹索引,也可以使用位元影像索引。
二、管理索引的原則
使用索引應該遵循以下一些基本的原則。
1.小表不需要建立索引。
2.對於大表而言,如果經常查詢的記錄數目少於表中總記錄數目的15%時,可以建立索引。這個比例並不絕對,它與全表掃描速度成反比。
3.對於大部分列值不重複的列可建立索引。
4.對於基數大的列,適合建立B樹索引,而對於基數小的列適合建立位元影像索引。
5.對於列中有許多空值,但經常查詢所有的非空值記錄的列,應該建立索引。
6.LONG和LONG RAW列不能建立索引。
7.經常進行串連查詢的列上應該建立索引。
8.在使用CREATE INDEX語句建立查詢時,將最常查詢的列放在其他列前面。
9.維護索引需要開銷,特別時對錶進行插入和刪除操作時,因此要限制表中索引的數量。對於主要用於讀的表,則索引多就有好處,但是,一個表如果經常被更改,則索引應少點。
10.在表中插入資料後建立索引。如果在裝載資料之前建立了索引,那麼當插入每行時,Oracle都必須更改每個索引。
三、LONG類型(可儲存2G)主要用於不需要作字串搜尋的長串資料,如果要進行字元搜尋就要用varchar2類型,儲存這麼長的請使用 pstat1.setCharacterStream()方法,資料見附件P26
四、建立索引文法如下
CREATE INDEX語句的文法如下:
CREATE [UNIQUE] | [BITMAP] INDEX index_name
ON table_name([column1 [ASC|DESC],column2
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1]
[STORAGE (INITIAL n2)]
[NOLOGGING]
[NOLINE]
[NOSORT];
五、
1、查看索引資訊可以在 all_indexs 表中
2、查看索引資訊及引用的列 all_ind_columns
3、查看函數索引資訊 all_ind_expressions
4、oracle比較智能,有時候即使建立了索引也不會使用,比如說在資料量比較少的情況下,可能就不會用索引
5、當進行全表掃描的時候,不用索引效率會更好
6、查詢可能會使用緩衝,所以說如果發現執行速度變快了,不一定說明你的sql更優了,有可能是使用到了緩衝而已
7、使用plsql中的“解釋計劃”功能可以比較執行計畫的消耗,進而寫出更優的sql
oracle 索引的(建立、簡介、技巧、怎樣查看)