索引的基本概念:
(1).要理解索引,可以把書作為一個模型類比。一本書裡的內容,相當於一張大表存儲的數據,而書前面的目錄就相當於這個表的索引;
(2).索引可以擁有獨立的存儲磁盤空間;
(3).索引占用的磁盤空間要比表小的多,其主要作用是為了加快對數據的搜索速度;
(4).同時可以保證數據的唯一性。
索引的類型:可分為B樹索引(B-Tree)、位圖索引(bitmap)、反向鍵索引(reverse)、基於函數的索引。
B樹索引(B-Tree):
樹形結構,每個葉子節點中都包括索引列的值和記錄行對應的物理地址ROWID(鍵值和ROWID值);
采用B樹索引可以確保無論索引條目位於何處,Oracle都需要花費相同的I/O就可以獲取它。
--例如:1001 rowid
--創建普通索引
create index employee_ix_ename on employee(ename);
--創建唯一索引
create unique index employee_UQ_eid on employee(eid);
--創建符合索引
create index employee_ix_ns on employ(ename,esex);
--注意:符合索引中的列,通常將在查詢語句的where子句中經常使用的列放在前面。
位圖索引(bitmap):
對基數較小,且基數相對穩定的列建立索引時,首先考慮位圖索引;
--例如:“性別”列的取值一般只有男、女,類似這樣的列基數穩定且較小。
create bitmap employee_ix_esex on employ(esex);
反向鍵索引(reverse):
也叫翻轉索引,是一種特殊的B樹索引,適用於在含有序列數的列上創建。
--例如:索引鍵為2009,反向鍵索引將其翻轉成9002.
create index employee_ix_eid on employee(eid) reverse;
基於函數的索引:
常用與UPPER、LOWER、TO_CHAR(date)等函數分類上
--創建基於to_char()的函數索引
create index employee_ix_func on employee(to_char(edate,'yyyy-mm-dd'));
管理索引:合並、重建、監視、刪除
隨著表不斷更新,插入、更新數據,表的索引會產生越來越多的存儲碎片,這會影響索引的使用效率。
--合並索引,釋放空間
alter index employee_ix_ename coalesce deallocate unused;
--重建索引,實際上是在表空間中重新建立一個新的索引,然後刪除原來的索引
alter index employee_ix_ename rebuild;
--監視索引,打開索引的監視狀態後,可查看V$object_usage
----打開
alter index employee_ix_ename monitoring usage;
----關閉
alter index employee_ix_ename nomonitoring usage;
--刪除索引
Drop index employee_ix_ename;
索引組織表(Index Organized Table,IOT):
不像普通的表直接采用堆組織方式將記錄無序地存放在數據段中;
而采用類似B樹索引的索引組織方式將記錄按照某個鍵列進行排序後,再以B樹方式存在數據段中。