程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 【索引】聯合索引的基本知識,聯合索引知識

【索引】聯合索引的基本知識,聯合索引知識

編輯:Oracle教程

【索引】聯合索引的基本知識,聯合索引知識


0.預備

假設我們有表 user (id,name)列

1.聯合索引是個什麼東西

  我們知道,對於表的單列(如id)數據,是可以建立索引的,對於多列(id和name組合,或者,name和id組合),也可以建立索引。聯合索引,也稱之為組合索引。

      先來看單列索引的邏輯結構。

      

  由此得出索引的三個特征:索引有序+高度較低+存儲列值

  聯合索引也滿足這三個特征,但這裡的邏輯圖就不畫了,而是以更直觀的方式來展現其查找邏輯,這裡應注意,聯合索引的列有前後,以id列在前、name列在後為例。

    

     建聯合索引前的情況

 

    建聯合索引後的情況(先按ID排序+再按Name排序)

  

 

2.建立聯合索引的語法 

 create index indexName on  tableName(column1,column2,...,columnN),如create idx_un_userid_username on user(id,name)

 聯合索引可以建立多列(列數大於2)的索引,建議列數最多不要越過3列,超過3列,應重新設計表。

3.聯合索引的好處

   a:避免回表

      在執行計劃中,table access by index rowid代表是回表動作。

      如在user的id列建有索引,select id from user這個不用回表,直接從索引中讀取id的值,而select id,name from user中,不能返回除id列其他的值,所以必須要回表。

      如果建有了id和name列的聯合索引,則可以避免回表。

      另外,建立了id和name的聯合索引(id列在在前),則select id from user可以避免回表,而不用單獨建立id列的單列索引。

   b:兩個單列查詢返回行較多,同時查返回行較少,聯合索引更高效。

     如果select * from user where id=2 和select * from user where name='tom' 各自返回的行數比較多,而select * from user where id=2 and name='tom'返回的行數比較少,那麼這個時候使用聯合索引更加高效。

4.什麼時候該用聯合索引以及如何設計組合索引更高效

 

 

 

5.聯合索引在DML時候的性能分析

 


聯合索引與唯一索引的不同,當使用聯合索引中的一個字段查詢時會不會用到索引

查詢時使用聯合索引的一個字段,如果這個字段在聯合索引中所有字段的第一個,那就會用到索引,否則就無法使用到索引。
例如聯合索引 IDX(字段A,字段B,字段C,字段D),當僅使用字段A查詢時,索引IDX就會使用到;如果僅使用字段B或字段C或字段D查詢,則索引IDX都不會用到。
這個規則在oracle和mysql數據庫中均成立。
 

oracle 裡面的索引有聯合索引一說?

不知道你所說的聯合索引是什麼意思,我只知道oracle常用的復合索引,也就是多字段的索引,字段重不重,其實跟你經常用到的查詢有關,通常我們創建索引是推薦創建復合索引的,如果確實有必要,需要將檢索頻率高的字段放到最前面,這樣有利於索引的使用率。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved