浩哥笔记

我们的征途是星辰大海

  menu
42 文章
3364 浏览
1 当前访客
ღゝ◡╹)ノ❤️

MySQL主键索引(聚簇索引)和非主键索引(非聚簇索引)有什么区别

场景:MySQL数据库、innoDB存储引擎

什么是聚簇索引

  • 主键索引是聚簇索引,非主键索引是非聚簇索引
  • 聚簇索引不是一种索引类型,而是一种数据存储方式。聚簇索引将索引和数据存在一起,找到了索引就等于找到了数据,所以不需要回表,查找效率更高。

聚簇索引和非聚簇索引B+树的存储结构区别

  • 聚簇索引
    image.png

    叶子节点存放的是索引和整列的数据

  • 非聚簇索引(也叫二级索引)
    image.png

    叶子节点存放的是主键的值

什么是回表

InnoDB 中,对于主键索引,只需要走一遍主键索引的查询就能在叶子节点拿到数据。而对于普通索引,叶子节点存储的是 key + 主键值,因此需要再走一次主键索引,通过主键索引找到行记录,这就是所谓的回表查询,先定位主键值,再定位行记录。

一张表中一定会聚簇索引

InnoDB中必然且只会有一个聚簇索引,一般是主键,如果没有主键,就会优先选择非空的唯一索引,唯一索引也没有,就会创建一个隐藏的 row_id 作为聚簇索引。

走非主键索引查询一定会回表吗

不一定,如果查询语句所要求的字段全部命中了索引,那么就不必再进行回表查询就能拿到所有的请求数据。很容易理解,有一个 user 表,主键为 id,name 为普通索引,则再执行:select id, name from user where name = ‘joonwhee’ 时,通过name 的索引就能拿到 id 和 name了,因此无需再回表去查数据行了。


标题:MySQL主键索引(聚簇索引)和非主键索引(非聚簇索引)有什么区别
作者:barryzpc
地址:https://myblog.zhengpc.com/articles/2024/08/08/1723102581316.html
说明:转载请注明出处
赞赏:如果对你有帮助,可略微支持一下
赞赏码