1. 程式人生 > 其它 >MySQL的一級索引和二級索引介紹

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
... ... ...

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

則只需要讀取3個磁碟塊

,就可以獲取到資料。

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

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

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

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

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