索引技術

索引技術

索引是對數據庫表中一個或多個列的值進行排序的結構。優點:大大加快檢索速度;創建唯一性索引,保證數據庫表中每一行數據的唯一性;加速表和表之間的連接;在使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間——大大減少服務器需要掃描的數據量;幫助服務器避免排序和臨時表;將所及I/O變爲順序I/O。但也有缺點:索引需要佔用數據表以外的物理存儲空間;創建索引和維護索引要花費一定的時間;當對錶進行更新操作時,索引需要被重建,這樣降低了數據的維護速度。

索引使用規則:

  1. 不要索引數據量不大的表,對於小表來講,表掃描的成本並不高。
  2. 不要設置過多的索引,在沒有聚集索引的表中,最大可以設置249個非聚集索引,過多的索引首先會帶來更大的磁盤空間,而且在數據發生修改時,對索引的維護是特別消耗性能的。
  3. 合理應用複合索引,有某些情況下可以考慮創建包含所有輸出列的複合索引。
  4. 對經常使用範圍查詢的字段,可能考慮聚集索引。
  5. 避免對不常用的列,邏輯性列,大字段列創建索引。

索引類型

  • 普通索引:create index stusno on student(sno)
  • 唯一索引:unique。例如:create unique index stusno on student(sno)表明此索引的每一個索引值只對應唯一的數據記錄對於單列惟一性索引,這保證單列不包含重複的值。對於多列惟一性索引,保證多個值的組合不重複
  • 主鍵索引:數據庫表經常有一列或多列組合,其值唯一標識表中的每一行。該列稱爲表的主鍵。在數據庫關係圖中爲表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。
  • 聚集索引:在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。
  • 全文索引(全文檢索):具體細節詳見https://blog.csdn.net/hycxag/article/details/83384652

索引的實現

  • B+樹:是一種平衡樹,數據庫開發商會設置子節點數的一個最大值,這個值不會太小,所以B+樹一般來說比較矮胖,而紅黑樹就比較瘦高了。如果經常需要同時對兩個字段進行AND查詢,那麼使用兩個單獨索引不如建立一個複合索引,因爲兩個單獨索引通常數據庫只能使用其中一個,而使用複合索引因爲索引本身就對應到兩個字段上的,效率會有很大提高。
  • 散列索引:通過散列函數來定位的一種索引,不過很少有單獨使用散列索引的,反而是散列文件組織用的比較多。散列文件組織就是根據一個鍵通過散列計算把對應的記錄都放到同一個槽中,這樣的話相同的鍵值對應的記錄就一定是放在同一個文件裏了,也就減少了文件讀取的次數,提高了效率。
  • 位圖索引:是一種針對多個字段的簡單查詢設計的一種特殊的索引,適用範圍比較小,只適用於字段值固定並且值的種類很少的情況,比如性別,只能有男和女,或者級別,狀態等等,並且只有在同時對多個這樣的字段查詢時才能體現出位圖的優勢。位圖的基本思想就是對每一個條件都用0或者1來表示,如有5條記錄,性別分別是男,女,男,男,女,那麼如果使用位圖索引就會建立兩個位圖,對應男的10110和對應女的01001,這樣做有什麼好處呢,就是如果同時對多個這種類型的字段進行and或or查詢時,可以使用按位與和按位或來直接得到結果了。
  • 三種索引的比較:B+樹最常用,性能也不差,用於範圍查詢和單值查詢都可以。特別是範圍查詢,非得用B+樹這種順序的纔可以;HASH的如果只是對單值查詢的話速度會比B+樹快一點,但是ORACLE好像不支持HASH索引,只支持HASH表空間;位圖的使用情況很侷限,只有很少的情況才能用,一定要確定真正適合使用這種索引才用(值的類型很少並且需要複合查詢,比如性別),否則建立一大堆位圖就一點意義都沒有。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章