MySQL中的聚集索引、二级索引使用解读

 更新时间:2025年07月05日 09:11:10   作者:言之。  
这篇文章主要介绍了MySQL中的聚集索引、二级索引使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

以下是关于聚集索引、二级索引(非聚集索引)以及回表查询的重点内容:

在这里插入图片描述

聚集索引

定义与特点:聚集索引是将数据存储与索引放在一块儿,B树索引结构的叶子节点保存了整行数据,并且有且只能有一个,通常情况下是主键。

选举规则

  • 若表中有主键,那么主键就是聚集索引。
  • 若表没有主键,会查看是否有唯一索引,若有则将唯一索引当作聚集索引。
  • 若表既没有主键也没有唯一索引,InnoDB引擎会自动生成一个隐藏的聚集索引。

在这里插入图片描述

二级索引(非聚集索引)

  • 定义与特点:二级索引将数据与索引分开存储,B树索引结构的叶子节点关联的是对应的主键,一个表中可以有多个二级索引。
  • 存储结构示例:以给表中的name字段添加索引为例,其在B树中叶子节点存储的是对应数据的主键值,而非整行数据,这与聚集索引存储整行数据不同。

回表查询

在这里插入图片描述

过程示例

  • 假设有查询语句select * from user where name = 'arm',由于给name字段添加了索引,
  • 会先走二级索引。从根节点开始比对,
  • 找到对应的节点(如找到arm对应的节点),但此时二级索引只能拿到主键值(如10),
  • 因为查询语句是“select *”需要整行数据,所以要拿着主键值(10)再到聚集索引中查找。
  • 在聚集索引中同样从根节点比对,最终定位到整行数据。

定义

  • 先通过二级索引找到对应的主键值,然后拿到主键再到聚集索引中找到整行数据的过程就是回表查询。

面试回答技巧

  • 当被问到“什么是聚集索引和非聚集索引”时,回答应包含聚集索引是数据与索引放一块,叶子节点存整行数据,一般是主键且只有一个;二级索引(非聚集索引)是数据与索引分开存,叶子节点存主键值,可以有多个,单独给字段创建的索引大多是二级索引。
  • 当被问到“什么是回表查询”时,先介绍聚集索引和二级索引的概念,再解释回表查询是先通过二级索引找主键值,再用主键到聚集索引找整行数据的过程。实际面试中,即使面试官直接问回表查询,也应先介绍索引相关概念再解释回表查询。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql中json基础查询详解(附图文)

    mysql中json基础查询详解(附图文)

    MySQL提供了一些函数来对JSON数据进行操作,下面这篇文章主要给大家介绍了关于mysql中json基础查询的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • mysql中的load命令使用方法

    mysql中的load命令使用方法

    使用mysql 中的load 命令,可以将txt 文件中的内容加载到数据库表中
    2013-10-10
  • mysql派生表(Derived Table)简单用法实例解析

    mysql派生表(Derived Table)简单用法实例解析

    这篇文章主要介绍了mysql派生表(Derived Table)简单用法,结合实例形式分析了mysql派生表的原理、简单使用方法及操作注意事项,需要的朋友可以参考下
    2019-12-12
  • mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法

    mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法

    这篇文章主要介绍了mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • mysql decimal类型判断是否为0

    mysql decimal类型判断是否为0

    在MySQL中,DECIMAL是一种用于存储精确小数的数据类型,本文主要介绍了mysql decimal类型判断是否为0,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Oracle与MySQL的区别详解

    Oracle与MySQL的区别详解

    MySQL和Oracle Database都是一个关系型数据库管理系统,本文主要介绍了MySQL和Oracle Database的区别及优缺点是什么,感兴趣的小伙伴欢迎阅读
    2023-04-04
  • MySql 5.7.17 winx64的安装配置详细教程

    MySql 5.7.17 winx64的安装配置详细教程

    这篇文章主要介绍了MySql 5.7.17 winx64的安装配置教程,初始化数据库、配置相关信息的方法在本文中介绍的非常详细,需要的朋友参考下
    2017-01-01
  • mysql数据库的分区表示例代码

    mysql数据库的分区表示例代码

    这篇文章主要介绍了mysql数据库的分区表的相关资料,文章介绍了两种创建SQL表分区的方法,分别是手动创建和使用MySQL的定时事件来自动创建分区,手动创建分区时,需要在代码中判断分区并新增,可能会引入一些问题,需要的朋友可以参考下
    2024-11-11
  • mysql 5.6.37(zip)下载安装配置图文教程

    mysql 5.6.37(zip)下载安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 5.6.37(zip)下载安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • JDBC 连接MySQL实例详解

    JDBC 连接MySQL实例详解

    这篇文章主要介绍了JDBC 连接MySQL实例详解的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论