聚簇索引和非聚簇索引


聚簇索引

數據和索引存儲到一起,找到索引就獲取到了數據。聚簇索引是唯一的,InnoDB一定會有一個聚簇索引來保存數據。非聚簇索引一定存儲有聚簇索引的列值;

InnoDB聚簇索引選擇順序:

  1. 默認選擇主鍵
  2. 沒有主機,選擇唯一的非空索引;
  3. 都沒有,則隱式定義一個主鍵;

非聚簇索引

數據存儲和索引分開,葉子節點存儲對應的行,需要二次查找,通常稱為[二級索引]或[輔助索引];

檢索過程

InnoDB:

1、通過id=7查詢,直接可以取到數據;

2、如果通過name查詢,需先找到id=14,然后再通過id查詢;

MyISAM:

輔助索引可以通過輔助鍵直接找到數據地址,不用再訪問主鍵;

聚集索引與非聚集索引的區別?

1、聚集索引(一般為主鍵)數據行的物理順序和列值邏輯順序相同,一個表只能擁有一個聚集索引,可以有多個非聚集索引;

2、使用非聚集索引查詢,沒有完整的數據還得進行二次查詢,會影響查詢性能;

3、聚集索引查詢效率更高,但由於要移動對應數據的物理位置,寫入性能並不高;

為什么在主鍵上創建聚集索引比創建非聚集索引要慢?

由於主鍵的唯一性約束,在插入數據時要保證不能重復。聚集索引由於索引葉節點就是數據頁,要檢查數據唯一性就得遍歷所有數據節點。而非聚集索引上已經包含了主鍵值,所以查找主鍵唯一性就只需要遍歷所有索引頁就可以了。

參考資料:

http://www.imooc.com/article/267890

https://www.jianshu.com/p/fa8192853184


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM