Mysql數據庫索引按照物理實現方式分類,索引可以分為 2 種:聚集索引和非聚集索引。
通常也把非聚集索引稱為二級索引或者輔助索引。
聚集索引可以按照主鍵來排序存儲數據,這樣在查找行的時候非常有效。
舉個例子,如果是一本新華字典,我們想要查找“好”這個字,直接在書中找漢語拼音的位置即可,也就是拼音“hao”。這樣找到了索引的位置,在它后面就是我們想要找的數據行。
非聚集索引不會把索引指向的內容像聚集索引一樣直接放到索引的后面,而是維護單獨的索引表(只維護索引,不維護索引指向的數據),為數據檢索提供方便。
我們還以新華字典為例,如果想要查找“好”字,那么按照部首查找的方式,先找到“好”字的偏旁部首,然后這個目錄會告訴我們“好”字存放到那一章節第多少頁,我們再去指定的頁碼找這個字。
也就是說系統會進行兩次查找,第一次先找到索引,第二次找到索引對應的位置取出數據行。
聚集索引和非聚集索引二者的區別
聚集索引與非聚集索引的原理不同,在使用上也有一些區別:
- 聚集索引的葉子節點存儲的就是具體的數據記錄,非聚集索引的葉子節點存儲的是數據位置。非聚集索引不會影響數據表的物理存儲順序。
- 一個表只能有一個聚集索引,因為只能有一種排序存儲的方式,但可以有多個非聚集索引,也就是多個索引目錄提供數據檢索。
- 使用聚集索引的時候,數據的查詢效率高,但如果對數據進行插入,刪除,更新等操作,效率會比非聚集索引低。