首頁  >  文章  >  資料庫  >  MySQL回表指的是什麼

MySQL回表指的是什麼

王林
王林轉載
2023-06-01 22:46:043122瀏覽

引言

簡單來說,回表就是 MySQL 要先查詢到主鍵索引,然後再用主鍵索引定位到資料。

在下面,對一些問題進行分析與回答:

  • #什麼是叢集索引?什麼是非聚集索引?

  • 為什麼回表要先查到主鍵索引?

  • 主鍵索引和非主鍵索引有什麼不同?

  • 如何避免回表?

叢集索引和非叢集索引是什麼?

MySQL 的索引有不同的角度的分類方式,例如:依資料結構分、以邏輯角度分、依實體儲存分。

其中,依實體儲存分有兩種索引:叢集索引非叢集索引

簡單來說,叢集索引就是主鍵索引

主鍵索引以外的就是非叢集索引,非叢集索引又叫輔助索引或二級索引。

主鍵索引和非主鍵索引有什麼不同?

相同點:都使用的是 B Tree 。

不同點:葉子節點儲存的資料不同

  • 主鍵索引的葉子節點儲存的是一行完整的資料;

  • 非主鍵索引的葉子節點儲存的是主鍵值。葉子節點不包含記錄的全部數據,非主鍵的葉子節點除了用來排序的 key 還包含一個書籤(bookmark),其中存儲了聚簇索引的 key。

那麼這兩個索引在使用上有什麼差別呢?

使用主鍵索引查詢:

# 主键索引的的叶子节点存储的是**一行完整的数据**,
# 所以只需搜索主键索引的 B+Tree 就可以轻松找到全部数据
select * from user where id = 1;

使用非主鍵索引查詢:

# 非主键索引的叶子节点存储的是**主键值**,
# 所以MySQL会先查询到 name 列的索引的 B+Tree,搜索得到对应的主键值
# 然后再去搜索该主键值查询主键索引的 B+Tree 才可以找到对应的数据
select * from user where name = 'Jack';

可以看出使用非主鍵索引要比主鍵索引多使用一次B Tree。

B-Tree 和 B Tree 的簡單理解

理解叢集索引和非叢集索引的關鍵在於 B Tree 的理解。

用一幅圖來表示,其它的就不再過多解釋了:

MySQL回表指的是什麼

這裡只是簡單介紹一下B-Tree 和B Tree 的區別:

  • B 樹中只有葉子節點會帶有指向記錄的指針,而B樹則所有節點都帶有,在內部節點出現的索引項不會再出現在葉子節點中。

  • B 樹中所有葉子節點都是透過指標連接在一起,而B樹不會。

如何避免回表?

使用覆蓋索引,所謂覆蓋索引就是指索引中包含了查詢中的所有字段,這種情況就不需要再進行回表查詢了。

以上是MySQL回表指的是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除