MySQL的一級索引和二級索引介紹


導讀

本文參考自簡書的某位作者,並做了增刪。我一般稱為“一級索引”和“二級索引”,這樣好記一點。正確的稱謂是:集聚索引和非聚集索引。顧名思義,葉子節點存放主索引和數據的樹,稱為集聚索引樹;葉子節點存放輔助索引和主索引的樹,稱為非集聚索引樹。

備注:一和二體現了主次和先后關系,聚焦和非聚焦體現不出來,我建議稱為:“一級索引”和“二級索引”。

1、一級索引

索引和數據存儲在一起,都存儲在同一個B+tree中的葉子節點。一般主鍵索引都是一級索引

2、二級索引

二級索引樹的葉子節點存儲的是主鍵而不是數據。也就是說,在找到索引后,得到對應的主鍵,再回到一級索引中找主鍵對應的數據記錄。

3、例子介紹

下面我們通過一個具體的示例進行演示一級索引和二級索引。有如下表pl_ranking(編程語言排行榜表),該表包含3個字段,如下:

  1. id:主鍵
  2. plname:編程語言名稱
  3. ranking:排名
id plname ranking
15 C 2
16 Java 1
18 Php 6
23 C# 5
26 C++ 3
29 Ada 17
50 Go 12
52 Lisp 15
... ... ...

index1.png

從圖中我們可以看到,索引和數據都在一顆樹的葉子節點,是存在一起的。通過定位索引就直接可以查找到數據。如果查找id=16的編程語言,

 

則只需要讀取3個磁盤塊,就可以獲取到數據。

index2.png

從上圖中我們發現,該B+tree根據plname列進行構建的,只存儲一級索引數據。比如,查找編程語言為“Java”的數據。

select id, plname, ranking from pl_ranking where plname='Java';

首先通過二級索引樹中找到Java對應的主鍵id為 “16”(讀取2個磁盤塊)。然后在去主鍵索引中查找id為“16” 的數據(讀取3個磁盤塊)。

4、一級索引和二級索引的關系:回表

一級索引可以單獨存在,二級索引不能單獨存在,必須依附於一級索引,這叫做“回表”。


免責聲明!

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



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