Oracle的各種索引(普通 唯一 復合)

2021-09-10 04:44:45 字數 2166 閱讀 7208

索引對於優化資料庫查詢效率方面有著非常巨大的作用,下面是乙個簡單索引查詢效率示例,希望能幫到一些朋友。

前提:範例表user_info,通過儲存過程插入6萬條資料。

表結構:

儲存過程:

begin

declare i int;

set i =1;

while i <= 60000 do

insert into user_info values(i,concat(「趙錢」,i),concat(「passw」,i),26);

set i = i + 1;

end while;

end建立索引前:

從上執行結果看出,根據name查詢時,耗時0.046s;

然後根據id查詢,執行結果如下:

從上可以很明顯的看出,根據主鍵id查詢時間短的多得多!

這是因為:建立主鍵的時候自動給主鍵新增了索引,且該索引為唯一性索引。

即主鍵一定是唯一性索引。

但是一張表中可以有多個唯一性索引,所以唯一性索引不一定是主鍵。

普通索引和唯一性索引的區別  start

*********************

在這裡不得不講一下普通索引和唯一性索引的區別:

1、普通索引

普通索引的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件(where column = )或排序條件(order by column)中

的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊、最緊湊的資料列(如乙個整數型別的資料列)來建立索引。

2、唯一索引

普通索引允許被索引的資料列包含重複的值。比如說,因為人有可能同名,所以同乙個姓名在同乙個「員工個人資料」資料表裡可能出現兩次或更多次。

如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該用關鍵字unique把它定義為乙個唯一索引。這麼做的好處:一是簡化了mysql對這個索引的管理工作,這個索引也因此而變得更有效率;二是mysql會在有新記錄插入資料表時,自動檢查新記錄的這個欄位的值是否已經在某個記錄的這個欄位裡出現過了;如果是,mysql將拒絕插入那條新記錄。也就是說,唯一索引可以保證資料記錄的唯一性。事實上,在許多場合,人們建立唯一索引的目的往往不是為了提高訪問速度,而只是為了避免資料出現重複。

************普通索引和唯一性索引的區別   end

下面開始建立索引(name):

create index ind_user_info_name on user_info(name);

執行成功後根據name查詢:

接下來是唯一索引!!用字段pass來示範:

新增索引前:

新增唯一索引:

create unique index uni_user_info_pass on user_info(pass);

新增索引後再查詢:

唯一性索引的另乙個作用,控制該列不能有相同值!

檢視表中所有的索引:

為了下面的演示,把剛建立的兩個索引刪除!

drop index ind_user_info_name on user_info;

drop index uni_user_info_pass on user_info;

建立乙個唯一性復合索引:

create unique index uni_user_info_pass on user_info(name,pass);

然後執行插入操作:

在這裡因為是複合型索引,只有當任意兩條資料name-pass兩字段的值都對應相同時,才起到唯一約束的作用!!!!

關於普通復合索引index這裡就不再詳細執行截圖描述,只需要注意下面這形式的索引意義就ok了!!!!

當建立復合索引index(column1,column2,column3),這就相當於建立了以下三個索引:

index(column1),

index(column1,column2)

index(column1,column2,column3)  // 跟三個欄位的順序沒有關係   比如:index(column3,column1,column2),它們是一樣的效果

上面是建立索引,下面的語句提供查詢索引(oracle中經過測試):

select * from user_indexes where table_name=『表名』;

普通索引 唯一索引 區別

分析唯一索引和普通索引在查詢語句和更新語句中的效能影響。假設執行以下語句 select id from t where k 5這個查詢語句在索引樹上查詢的過程,先是通過 b 樹從樹根開始,按層搜尋到葉子節點,然後可以在資料頁內部通過二分法來定位記錄。以上看起來唯一索引比普通索引少了一步判斷,其實帶來...

普通索引唯一索引的區別

1 查詢 唯一索引查到滿足條件的資料後直接返回 普通索引查到滿足條件的資料後會繼續匹配下一行是否滿足條件 2 寫唯一索引 需要判斷是否重複,需要將對應的頁從磁碟載入的記憶體中 普通索引 普通索引使用change buffer 占用buffer pool的空間 直接將更新寫入到buffer中,不用讀盤...

MySQL普通索引與唯一索引

總結參考文獻 當我們需要在乙個唯一欄位上建立索引時,究竟是建立普通索引還是唯一索引的效能更好呢?這時需要從兩個角度考慮 對於普通索引來說,查詢到滿足條件的第乙個記錄後,需要查詢下乙個記錄,直到碰到第乙個不滿足條件的記錄。對於唯一索引來說,由於索引定義了唯一性,查詢到第乙個滿足條件的記錄後,就會停止繼...