數據庫之聚集索引和非聚集索引的區別

聚集索引和非聚集索引的區別

1、聚集索引

  • 文件中的每個搜索碼值都對應一個索引值。一個表只能創建一個聚集索引,葉子節點就是對應的數據全部列的值
  • 數據行的物理順序與列值的順序相同,如果我們查詢id比較靠後的數據,那麼這行數據的地址在磁盤中的物理地址也會比較靠後。而且由於物理排列方式與聚集索引的順序相同,所以也就只能建立一個聚集索引了。
  • B+Tree結構

2、非聚集索引

  • 文件只爲索引碼的某些值建立索引項,並存儲該行主鍵值

  • 該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同,故一個表中可以擁有多個非聚集索引。

  • 非聚集索引在索引沒有覆蓋到對應的列的時候需要進行二次查詢

  • B+Tree結構

在這裏插入圖片描述
上圖可以看出,聚集索引(主鍵索引)查詢id爲7的索引數據只需要一次查詢,而非聚集索引(輔助索引)查詢到自己所含有的值,還要根據存儲的主鍵值去查詢剩餘的數據,這便是二次查詢,實際使用中,我們應該儘量避免二次查詢

總結

  • 聚集索引的查詢效率要比非聚集索引的效率要高,但是如果需要頻繁去改變聚集索引的值,寫入性能並不高,因爲需要移動對應數據的物理位置。
  • 非聚集索引在查詢的時候可以的話就避免二次查詢,這樣性能會大幅提升。這點我們可以採用組合索引進行查詢
  • 不是所有的表都適合建立索引,只有數據量大表才適合建立索引,且建立在選擇性高的列或者我們頻繁使用的列上面性能會更好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章