mysql聚集索引和非聚集索引的区别是什么

区别:1、聚集索引在叶子节点存储的是表中的数据,而非聚集索引在叶子节点存储的是主键和索引列;2、聚集索引中表记录的排列顺序和索引的排列顺序一致,而非聚集索引的排列顺序不一致;3、聚集索引每张表只能有一个,而非聚集索引可以有多个。

mysql聚集索引和非聚集索引的区别是什么

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

MySQL的Innodb存储引擎的索引分为聚集索引和非聚集索引两大类,理解聚集索引和非聚集索引可通过对比汉语字典的索引。汉语字典提供了两类检索汉字的方式,第一类是拼音检索(前提是知道该汉字读音),比如拼音为cheng的汉字排在拼音chang的汉字后面,根据拼音找到对应汉字的页码(因为按拼音排序,二分查找很快就能定位),这就是我们通常所说的字典序;第二类是部首笔画检索,根据笔画找到对应汉字,查到汉字对应的页码。拼音检索就是聚集索引,因为存储的记录(数据库中是行数据、字典中是汉字的详情记录)是按照该索引排序的;笔画索引,虽然笔画相同的字在笔画索引中相邻,但是实际存储页码却不相邻,这是非聚集索引。

聚集索引

索引中键值的逻辑顺序决定了表中相应行的物理顺序。

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。 聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行 的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此 类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节 省成本。

mysql聚集索引和非聚集索引的区别是什么

以上是innodb的b+tree索引结构

我们知道b+tree是从b-tree演变而来,一棵m阶的B-Tree有如下特性:

1、每个结点最多m个子结点。
2、除了根结点和叶子结点外,每个结点最少有m/2(向上取整)个子结点。
3、如果根结点不是叶子结点,那根结点至少包含两个子结点。
4、所有的叶子结点都位于同一层。
5、每个结点都包含k个元素(关键字),这里m/2≤k<m,这里m/2向下取整。
6、每个节点中的元素(关键字)从小到大排列。
7、每个元素(关键字)字左结点的值,都小于或等于该元素(关键字)。右结点的值都大于或等于该元素(关键字)。

b+tree的特点是:

1、所有的非叶子节点只存储关键字信息。
2、所有卫星数据(具体数据)都存在叶子结点中。
3、所有的叶子结点中包含了全部元素的信息。
4、所有叶子节点之间都有一个链指针。

我们发现,b+trre有以下特性:

对一个范围内的查询特别有效快速(通过叶子的链指针);对具体的key值查询仅仅比b-tree低效一点(因为要到叶子一级),但也可以忽略;

非聚集索引

  索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

  其实按照定义,除了聚集索引以外的索引都是非聚集索引,只是人们想细分一下非聚集索引,分成普通索引,唯一索引,全文索引。如果非要把非聚集索引类比成现实生活中的东西,那么非聚集索引就像新华字典的偏旁字典,他结构顺序与实际存放顺序不一定一致。

mysql聚集索引和非聚集索引的区别是什么

非聚集索引的存储结构与前面是一样的,不同的是在叶子结点的数据部分存的不再是具体的数据,而数据的聚集索引的key。所以通过非聚集索引查找的过程是先找到该索引key对应的聚集索引的key,然后再拿聚集索引的key到主键索引树上查找对应的数据,这个过程称为回表!

举个例子说明下:

卡奥斯智能交互引擎 卡奥斯智能交互引擎

聚焦工业领域的AI搜索引擎工具

卡奥斯智能交互引擎 36 查看详情 卡奥斯智能交互引擎

create table student (`id` INT UNSIGNED AUTO_INCREMENT,`username` VARCHAR(255),`score` INT,PRIMARY KEY(`id`), KEY(`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

聚集索引clustered index(id), 非聚集索引index(username)。

使用以下语句进行查询,不需要进行二次查询,直接就可以从非聚集索引的节点里面就可以获取到查询列的数据。

select id, username from t1 where username = '小明'select username from t1 where username = '小明'

但是使用以下语句进行查询,就需要二次的查询去获取原数据行的score:

select username, score from t1 where username = '小明'

聚集索引和非聚集索引区别

区别一:

聚集索引:就是以主键创建的索引,在叶子节点存储的是表中的数据

非聚集索引:就是以非主键创建的索引(也叫做二级索引),在叶子节点存储的是主键和索引列。

区别二:

聚集索引中表记录的排列顺序和索引的排列顺序一致;所以查询效率快,因为只要找到第一个索引值记录,其余的连续性的记录在物理表中也会连续存放,一起就可以查询到。缺点:新增比较慢,因为为了保证表中记录的物理顺序和索引顺序一致,在记录插入的时候,会对数据页重新排序。

非聚集索引中表记录的排列顺序和索引的排列顺序不一致。

区别三:

聚集索引是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储不连续。

区别四:

聚集索引每张表只能有一个,非聚集索引可以有多个。

【相关推荐:mysql视频教程】

以上就是mysql聚集索引和非聚集索引的区别是什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/284028.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
高并发下如何确保业务处理前页面请求版本与持久化存储版本一致?
上一篇 2026年10月18日 23:26:12
微信聊天记录怎么恢复到另一部手机_微信跨设备聊天恢复方法
下一篇 2025年11月8日 23:13:24

相关推荐

  • MYSQL之巧用字符函数做数据筛选

    本文主要介绍了mysql 一个巧用字符函数做数据筛选的题,需要的朋友可以参考下,希望能帮助到大家。 问题描述: 结构: test 有两个字段,分别是col1和col2,都是字符字段,里面的内容都是用,号分隔的三个数字,并且是一一对应的, 比如col1内容是:26,59,6col2内容是:1502.5…

    2026年10月18日
    100
  • mysql视图是什么?视图有哪些优缺点?

    mysql视图是虚拟表,不存储实际数据,基于真实表查询结果。1.优点:简化复杂查询,将多表join封装为视图方便调用;2.安全性:控制访问权限,隐藏敏感字段;3.缺点:性能可能受影响,尤其嵌套视图或复杂逻辑时;4.更新限制:含聚合函数、distinct、group by或多表连接的视图不可更新。使用…

    2026年10月18日
    200
  • laravel读什么?有什么用?

    laravel读什么?有什么用?laravel读什么?有什么用?laravel读什么?有什么用?laravel读什么?有什么用?

    Laravel是一款PHP开发框架,用于快速构建Web应用。新手应从官方文档入手,逐步学习Laravel的核心概念,如路由、控制器、模型和视图。其次,了解PHP、数据库、前端技术和面向对象编程基础知识。在实践中学习,从简单的项目开始,在出错中总结经验。此外,借助社区力量,从Stack Overflo…

    2026年10月18日 • 用户投稿
    000
  • MySQL详细解析之Clone插件

    MySQL详细解析之Clone插件MySQL详细解析之Clone插件MySQL详细解析之Clone插件MySQL详细解析之Clone插件

    本篇文章给大家带来了关于mysql中的相关知识,其中主要介绍了clone的相关问题,mysql 8.0.17引入了clone插件,可以进行本地或从远程mysql服务器实例进行克隆,希望对大家有帮助。 推荐学习:mysql教程 克隆插件简介 MySQL 8.0.17引入了Clone插件,可以进行本地或…

    2026年10月18日 • 用户投稿
    400
  • mysql中的不等于怎么表示

    mysql中的不等于怎么表示mysql中的不等于怎么表示mysql中的不等于怎么表示mysql中的不等于怎么表示

    在mysql中,不等于可以用“”或者“!=”来表示,但是一般都是用“”来表示不等于,因为“”在任何SQL中都起作用,可移植性强,并且查询速度快。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysql中的不等于怎么表示 MySQL中常用到判断符号,而不等…

    2026年10月18日 • 用户投稿
    000
  • mysql怎么分组求和

    mysql怎么分组求和mysql怎么分组求和mysql怎么分组求和mysql怎么分组求和

    在mysql中,可以利用SELECT语句配合SUM()函数和“GROUP BY”来分组求和,语法为“SELECT 查询字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段一,分组字段二;”。 本教程操作环境:windows10系统、mysql8.0.22…

    2026年10月18日 • 用户投稿
    200
  • 一起来分析一下MySQL事务日志

    一起来分析一下MySQL事务日志一起来分析一下MySQL事务日志一起来分析一下MySQL事务日志一起来分析一下MySQL事务日志

    本篇文章给大家带来了关于mysql中的相关知识,其中主要介绍了mysql事务的相关问题,事务是mysql区别于nosql的重要特征,是保证关系型数据库数据一致性的关键技术,希望对大家有帮助。 推荐学习:mysql学习视频教程 一、MySQL事务 事务是MySQL区别于NoSQL的重要特征,是保证关系…

    2026年10月18日 • 用户投稿
    100
  • mysql读写分离实现方式是什么

    mysql读写分离实现方式是什么mysql读写分离实现方式是什么mysql读写分离实现方式是什么mysql读写分离实现方式是什么

    在mysql中,可以利用“mysql-proxy”实现读写分离;“mysql-proxy”是一个mysql官方提供用于实现读写分离的软件,也叫中间件,可以让主数据库处理写操作,而从数据库处理查询的操作,数据库的一致性则通过主从复制来实现。 本教程操作环境:windows10系统、mysql8.0.2…

    2026年10月18日 • 用户投稿
    100
  • workerman怎么调用数据库 workerman数据库调用教程

    workerman怎么调用数据库 workerman数据库调用教程workerman怎么调用数据库 workerman数据库调用教程workerman怎么调用数据库 workerman数据库调用教程workerman怎么调用数据库 workerman数据库调用教程

    WorkerMan 中高效数据库交互的关键在于采用异步数据库操作方式,例如 swoole_mysql 客户端库。通过使用连接池和事务功能,可以进一步提升效率和数据一致性。常见的坑包括连接超时、查询错误和死锁,可通过检查配置、SQL 语句和事务管理来解决。性能优化建议包括使用索引、优化 SQL 语句和…

    2026年10月18日 • 用户投稿
    200
  • MySQL索引给拿捏住了

    MySQL索引给拿捏住了MySQL索引给拿捏住了MySQL索引给拿捏住了MySQL索引给拿捏住了

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于mysql索引的相关问题,包括了索引按照逻辑功能划分、按照物理实现划分、按照字段个数划分等索引类型问题,希望对大家有帮助。 推荐学习:mysql教程 在 SQL 优化中,索引是至关重要的一环,能给查询效率带来质的飞跃,但是索引并不是万能…

    2026年10月18日 • 用户投稿
    300
  • 深入了解MySQL索引结构

    深入了解MySQL索引结构深入了解MySQL索引结构深入了解MySQL索引结构深入了解MySQL索引结构

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引结构的相关问题,那么,索引的结构是什么样的?为什么索引可以这么快?下面一起来看一下吧,希望对大家有帮助。 推荐学习:mysql教程 数据库存储单位 首先我们要知道,由于为了实现持久化,只能将索引存储在硬盘上,通过索引来进行查询的时候…

    2026年10月18日 • 用户投稿
    000
  • 一起来分析MySQL的update语句是怎样执行的

    一起来分析MySQL的update语句是怎样执行的一起来分析MySQL的update语句是怎样执行的一起来分析MySQL的update语句是怎样执行的一起来分析MySQL的update语句是怎样执行的

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于一条update语句是怎样执行的相关问题,执行update更新操作时,跟表有关的查询缓存会失效,所以语句就会把表上所有缓存结果都清空,下面就一起来看一下,希望对大家有帮助。 推荐学习:mysql教程 前期准备 首先创建一张表,然后插入三…

    2026年10月18日 • 用户投稿
    200
  • 怎么查询mysql的最大连接数

    怎么查询mysql的最大连接数怎么查询mysql的最大连接数怎么查询mysql的最大连接数怎么查询mysql的最大连接数

    在mysql中,可以利用“show variables like ‘%max_connections%’;”命令查询mysql的最大连接数;show命令用于提供多种形式获取数据库信息,“max_connections”用于表示最大连接数。 本教程操作环境:windows10系…

    2026年10月18日 • 用户投稿
    600
  • MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?

    MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?MySQL 5.7 my.ini配置文件:哪些参数是必备的?又有哪些常用配置需要了解?

    MySQL 5.7 my.ini 文件配置详解:必备与常用参数 MySQL 5.7 的 my.ini 配置文件至关重要,它包含数据库的各种参数设置。本文将重点介绍 my.ini 中必不可少的参数以及一些常用的配置选项。 必备参数: basedir: 指定 MySQL 的安装目录路径。这是启动 MyS…

    2026年10月18日 • 用户投稿
    300
  • 夯实MySQL基础的问题归纳

    夯实MySQL基础的问题归纳夯实MySQL基础的问题归纳夯实MySQL基础的问题归纳夯实MySQL基础的问题归纳

    本篇文章给大家带来了关于mysql的相关知识,其中主要总结了一些常见的问题,解决一下,包括了常规的,还有索引类、原理类和框架类的相关内容,希望对大家有帮助。 推荐学习:mysql视频教程 常规篇 1、说一下数据库的三大范式?  第一范式:字段原子性,第二范式:行唯一,有主键列,第三范式:每列和主键列…

    2026年10月18日 • 用户投稿
    100
  • mysql视图与表的区别是什么

    mysql视图与表的区别是什么mysql视图与表的区别是什么mysql视图与表的区别是什么mysql视图与表的区别是什么

    区别:1、视图是已编译好的sql语句,而表不是;2、视图没实际的物理记录,但表有;3、表是内容,而视图是窗口;4、表占用物理空间,而视图只是逻辑概念的存在,不占用物理空间;5、表是内模式,视图是外模式;6、表属于全局模式,视图属于局部模式。 本教程操作环境:windows7系统、mysql8版本、D…

    2026年10月18日 • 用户投稿
    100
  • MySQL中慢查询日志 慢查询分析与优化实战技巧

    要优化mysql性能,慢查询日志是关键切入点。1. 开启慢查询日志可在配置文件中设置slow_query_log=1、指定日志路径、设定long_query_time(如1秒)并记录未使用索引的sql;也可在运行时用set global命令动态开启。2. 查看日志需关注query_time(执行耗时…

    2026年10月18日
    100
  • mysql怎么查询字段数量

    mysql怎么查询字段数量mysql怎么查询字段数量mysql怎么查询字段数量mysql怎么查询字段数量

    查询方法:1、利用DESCRIBE语句展示表结构,语法“DESCRIBE 表名;”,输出的总记录行数就是字段数量;2、通过使用count()函数统计系统表“information_schema.COLUMNS”中指定数据条数来查询字段数量。 本教程操作环境:windows7系统、mysql8版本、D…

    2026年10月18日 • 用户投稿
    200
  • 怎么修改mysql登录密码

    怎么修改mysql登录密码怎么修改mysql登录密码怎么修改mysql登录密码怎么修改mysql登录密码

    修改方法:1、打开cmd命令窗口,执行“mysql -u root -p”命令并输入密码,以root权限登录mysql;2、执行“set password for 用户名@localhost=password(“新密码”);”命令修改密码。 本教程操作环境:windows10…

    2026年10月18日 • 用户投稿
    200
  • MySQL复制实例详解之GTID复制

    MySQL复制实例详解之GTID复制MySQL复制实例详解之GTID复制MySQL复制实例详解之GTID复制MySQL复制实例详解之GTID复制

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于gtid复制的相关问题,gtid是对于一个已提交事务的编号,并且是一个全局唯一的编号,下面一起来看一下,希望对大家有帮助。 推荐学习:mysql视频教程 从MySQL 5.6.5开始新增了一种基于GTID的复制方式。通过GTID保证了每…

    2026年10月18日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信