mysql的聚簇索引與非聚簇索引的簡短總結(轉)

轉自 http://blog.sina.com.cn/s/blog_a602def501032app.htmlhtml

在mysql數據庫中,myisam引擎和innodb引擎使用的索引類型不一樣,myisam對應的是非聚簇索引,而innodb對應的是聚簇索引。聚簇索引也叫複合索引、彙集索引等等。mysql

非聚簇索引

以myisam爲例,一個數據表table中,它是有table.frm、table.myd以及table.myi組成。table.myd記錄了數據,table.myi記錄了索引的數據。在用到索引時,先到table.myi(索引樹)中進行查找,取到數據所在table.myd的行位置,拿到數據。因此myisam引擎的索引文件和數據文件是獨立分開的,則稱之爲非聚簇索引。
  myisam類型的索引,指向數據在行的位置。即每一個索引相對獨立,查詢用到索引時,索引指向數據的位置。
複製代碼

聚簇索引

以innodb爲例,在一個數據table中,它的數據文件和索引文件是同一個文件。即在查詢過程當中,找到了索引,便找到了數據文件。在innodb中,即存儲主鍵索引值,又存儲行數據,稱之爲聚簇索引。
  innodb索引,指向主鍵對數據的引用。非主鍵索引則指向對主鍵的引用。innodb中,沒有主見索引,則會使用unique索引,沒有unique索引,則會使用數據庫內部的一個行的id來看成主鍵索引。
複製代碼

比較

在聚簇索引中,數據會被按照順序整理排列,當使用where進行順序、範圍、大小檢索時,會大大加速檢索效率。非聚簇索引在存儲時不會對數據進行排序,相對產生的數據文件體積也比較大sql

相關文章
相關標籤/搜索