Oracle中索引的原理


前言:本文解決的問題

  • Oracle中使用Index一定會加快查找速度嗎?
  • B+Tree和Bitmap索引的區別
  • 索引的原理

1 索引的基本概念

索引是一種數據庫結構,能夠就數據庫中的某列提供快速查詢,而不用檢索整個表格。建立索引時,oracle會首先對全表進行搜索,然后把要建立索引的字段排序,並構建構建索引條目(包含字段值和該字段在原表中的地址值rowid),把索引條目存儲到索引段中。

An index is a database structure that provides quick lookup of data in a column or columns of a table.

說到底了,這是用空間來換時間,但是查找對於經常要搜索的字段,尤其對於table數據很多的情況下,有索引速度還是快很多。可以形象地把索引類比於百科全書的目錄,雖然多了幾頁目錄,但是查找起來不需要一頁一頁搜尋,速度還是快很多。

2 索引的分類

索引里面的元素是排序的,如果不止一列,那么第一列是主排序,然后再根據后面的列順序依次排序。oracle中默認使用的是B-Tree索引。

2.1B-Tree索引(ORACLE默認的)

B-Tree是一種平衡樹,數據存儲在葉子節點上,檢索節點上的數據所走的步數長度是一樣的,數據結構見下圖。
B-Tree結構

2.11語法B-Tree基本介紹

`` create index <index_name> on <table_name> ( <column1>, <column2>, … );

2.12例子

建立索引的例子

2.2Bitmap索引

Bitmap類index是存儲在一個二維表中,行是rowid,列名稱是屬性的取值范圍,表格中的數據是屬性值。具體如下
bitmap
Bitmap主要用於選定的列中,屬性取值范圍比較小的,如為性別(male,female),衣服尺寸(S,M,L)等,而且在讀取比較多的系統中使用較多。

2.21 語法

CREATE BITMAP INDEX Index_Name ON Table_Name (Column_Name);

2.22 例子

bitmap 索引例子

2.3 二者區別

B-Tree索引適合屬性值取值范圍很大的,而bitmap索引適合於屬性值取值范圍小的。

3使用索引注意事項

  • oracle創建主鍵時會自動在該列上創建索引
  • 經常進行連接查詢的列應該創建索引
  • 使用create index時要將最常查詢的列放在最前面
  • 在使用where和join的屬性上建立索引
  • 在外鍵(foreign key)上建立索引

4 索引的缺點

  • 索引並不一定加快查詢速度,尤其是對於比較小的表來說

  • 索引是用空間換時間來實現快速查詢,因此也勢必會拖慢insert、delete、update等操作,因為每次操作后索引也必須更新。

參考文獻

https://dev.to/databasestar/a-guide-to-indexes-in-oracle
https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT811
https://www.cnblogs.com/wishyouhappy/p/3681771.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM