Oracle索引,看這篇就夠了

‘•’發表於2020-10-13

什麼是索引

索引是與表關聯的可選結構,是一種快速訪問資料的途徑,可提高資料庫效能。資料庫可以明確的建立索引,以加快對錶的執行sql語句的速度,當索引鍵作為查詢條件時,該索引將直接指向包含這些值的行的位置,即便刪除索引,也無需修改任何sql語句的定義

索引的分類

物理分類邏輯分類
分割槽或非分割槽索引單列或組合索引
B樹索引唯一或非唯一索引
正常或反向鍵索引基於函式索引
點陣圖索引

B樹索引

B樹索引通常也稱為標準索引。索引的頂部為,其中包含指向索引中下一級的項。下一級為分之塊,分之塊又指向索引下一級的塊,最低一級為葉節點,其中包含指向錶行的索引項。葉塊為雙向連結串列,有助於按關鍵字的升序和降序掃描索引

SQL>create [unique] index_name on table_name(column_list) 
[tablespace tablespace_name]

- unique:用於指定唯一索引,預設情況下為非唯一索引
- index_name:索引名
- table_name:表名
- column_list:列名,可以是多個列,使用逗號分隔
- tablespace_name:為索引指定表空間

唯一索引和非唯一索引

  • 唯一索引:

定義索引的列中任何兩行都沒有重複值。唯一索引中的索引關鍵字只能指向表中的一行。在建立主鍵約束和建立唯一約束時都會建立一個與之對應的唯一索引

  • 非唯一索引:

單個關鍵字可以有多個與其關聯的行

反向鍵索引

與常規B樹索引相反,反向鍵索引在保持列順序的同時反轉列的位元組。反向索引通過反轉索引
鍵的資料值來實現,其優點是對於連續增長的索引列,反轉索引列可以將索引資料分散在多
個索引塊間,減少I/O瓶頸的發生。
SQL>create unique index_reverse_name on table_name(column_list) REVERSE;

REVERSE

點陣圖索引

點陣圖索引的優點在於,它最適於低基數列(該列的值是有限的,理論上不會是無窮大的)。列如,員工表中的工種(job列),即便是有幾百萬條員工記錄,工種也是可計算的,工種列可以作為點陣圖索引,類似的還有圖書表類別列等。

點陣圖索引具有下列優點

  • 對於大批即時查詢,可以減少響應時間
  • 相比其他索引技術,佔用空間明顯減少
  • 即使在配置很低的終端硬體,也能獲得顯著的效能
    點陣圖索引不直接儲存rowId,而是儲存位元組位到rowId的對映,減少響應時間,節省空間佔用
    點陣圖索引不應當應用到頻繁發生insert,update,delete 操作的表上,這些DML操作在效能方面代價很高,點陣圖索引最適合於資料倉儲和決策支援系統
SQL>create bitmap index index_bit_name on table_name(column_name)

其它索引

  • 組合索引:在表內多列上建立索引,索引中列不必與表中的列順序一致,也不必相互鄰接
    • 使用場景當某幾個欄位在SQL語句的where字句中經常通過and操作符聯合在一起使用作為過濾條鍵謂詞
    • 複合索引欄位排序原則
      • 頻繁使用的欄位排在第一位
      • 使用頻率相同,則將最具選擇性的欄位放在前面
  • 基於函式索引:若使用的函式或表示式涉及正在建立的表中的一列或多列,則建立基於函式的索引,可以將給予函式的索引建立為B樹或點陣圖索引。
    • 表示式中不能出現聚合函式,
    • 不能在LOB型別的列上建立,
    • 建立時必須具有QUERT REWRITE許可權

索引使用原則

  • 表中匯入資料後在建立索引。否則每次表中插入資料都必須更新索引
  • 在適當的表和欄位建立索引,如果經常檢索的資料少於表中的15%則需要建立索引
  • 限制表中索引的數目,索引越多,在修改表時索引做出修改的工作量越大

總結

  • B樹索引是一個通用索引,在建立索引時它就是預設索引型別
  • 反向鍵索引建立在值是連續增長的列上
  • 點陣圖索引適合建立在低基數列上
  • 基於函式索引
  • 索引使用原則

相關文章