標籤:ocs serve key 範圍 uri oracl date 尺寸 iot
前言:本文解決的問題
- 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是一種平衡樹,資料存放區在葉子節點上,檢索節點上的資料所走的步數長度是一樣的,資料結構見。
2.11文法B-Tree基本介紹
`` create index <index_name> on <table_name> ( <column1>, <column2>, … ); ` `
2.12例子
2.2Bitmap索引
Bitmap類index是儲存在一個二維表中,行是rowid,列名稱是屬性的取值範圍,表格中的資料是屬性值。具體如下
Bitmap主要用於選定的列中,屬性取值範圍比較小的,如為性別(male,female),衣服尺寸(S,M,L)等,而且在讀取比較多的系統中使用較多。
2.21 文法
` ` CREATE BITMAP INDEX Index_Name ON Table_Name (Column_Name); ` `
2.22 例子
2.3 二者區別
B-Tree索引適合屬性值取值範圍很大的,而bitmap索引適合於屬性值取值範圍小的。
3使用索引注意事項
- oracle建立主鍵時會自動在該列上建立索引
- 經常進行串連查詢的列應該建立索引
- 使用create index時要將最常查詢的列放在最前面
- 在使用where和join的屬性上建立索引
- 在外鍵(foreign key)上建立索引
4 索引的缺點
參考文獻
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
Oracle中索引的原理