详解MySQL 聚簇索引与非聚簇索引

 更新时间:2020年09月24日 14:55:41   作者:Achilles_Heel  
这篇文章主要介绍了MySQL 聚簇索引与非聚簇索引的相关资料,帮助大家更好的理解和学习MySQL索引,感兴趣的朋友可以了解下

1、聚集索引

表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,子结点即存储了真实的数据行,不再有另外单独的数据页。

在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。

从物理文件也可以看出 InnoDB(聚集索引)的数据文件只有数据结构文件.frm和数据文件.idb 其中.idb中存放的是数据和索引信息 是存放在一起的。

2、非聚集索引

表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。

从物理文件中也可以看出 MyISAM(非聚集索引)的索引文件.MYI和数据文件.MYD是分开存储的 是相对独立的

总结:

聚簇索引和非聚簇索引的区别是:

聚簇索引(innoDB)的叶子节点就是数据节点;

而非聚簇索引(myisam)的叶子节点仍然是索引文件 只是这个索引文件中包含指向对应数据块的指针

对于 非聚簇索引 来说,每次通过索引检索到所需行号后,还需要通过叶子上的磁盘地址去磁盘内取数据(回行)消耗时间。为了优化这部分回行取数据时间,InnoDB 引擎采用了聚簇索引。
聚簇索引,即将数据存入索引叶子页面上。对于 InnoDB 引擎来说,叶子页面不再存该行对应的地址,而是直接存储数据。

这样便避免了回行操作所带来的时间消耗。 使得 InnoDB 在某些查询上比 MyISAM 还要快!

ps. 关于查询时间,一般认为 MyISAM 牺牲了功能换取了性能,查询更快。但事实并不一定如此。多数情况下,MyISAM 确实比 InnoDB 查的快 。但是查询时间受多方面因素影响。InnoDB 查询变慢得原因是因为支持事务、回滚等等,使得 InnoDB的叶子页面实际上还包含有事务id(换句话说就是版本号) 以及回滚指针。

动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序 使用 使用
返回某范围内的数据 使用 不使用
一个或极少不同值 不使用 不使用
小数目的不同值 使用 不使用
大数目的不同值 不使用 使用
频繁更新的列 不使用 使用
外键列 使用 使用
主键列 使用 使用
频繁修改索引列 不使用 使用

简单来说,聚簇索引不适用于频繁更新的列、频繁修改的索引列和小数目的不同值。

以上就是详解MySQL 聚簇索引与非聚簇索引的详细内容,更多关于MySQL 聚簇索引与非聚簇索引的资料请关注脚本之家其它相关文章!

相关文章

  • 打开和关闭mysql服务的两种实现方法

    打开和关闭mysql服务的两种实现方法

    这篇文章主要介绍了打开和关闭mysql服务的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • MYSQL WHERE语句优化

    MYSQL WHERE语句优化

    where优化主要是在SELECT中,因为他们最主要是在那里使用,但是同样的优化也可被用于DELETE和UPDATE语句。
    2009-03-03
  • Win7下mysql5.5安装图文教程

    Win7下mysql5.5安装图文教程

    这篇文章主要为大家详细介绍了Win7下mysql5.5安装的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Navicat连接MySQL出现2059错误的解决方案

    Navicat连接MySQL出现2059错误的解决方案

    当使用Navicat连接MySQL时,如果出现错误代码2059,表示MySQL服务器不接受Navicat提供的加密插件,解决方法主要有两种:一是修改MySQL用户的认证插件为mysql_native_password,二是升级Navicat到最新版本以支持MySQL8.0及其默认的caching_sha2_password认证插件
    2024-10-10
  • 详解MYSQL中重命名procedure的一种方法

    详解MYSQL中重命名procedure的一种方法

    这篇文章主要介绍了MYSQL中重命名procedure的一种方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • MySQL数据库所在服务器磁盘满了的故障分析和解决方法

    MySQL数据库所在服务器磁盘满了的故障分析和解决方法

    这篇文章主要给大家介绍了MySQL数据库所在服务器磁盘满了的故障分析和解决方法,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • MySQL并发更新数据时的处理方法

    MySQL并发更新数据时的处理方法

    在后端开发中我们不可避免的会遇见MySQL数据并发更新的情况,作为一名后端研发,如何解决这类问题也是必须要知道的,同时这也是面试中经常考察的知识点。
    2019-05-05
  • Mysql 主从数据库同步(centos篇)

    Mysql 主从数据库同步(centos篇)

    Mysql 主从数据库同步(centos篇),需要的朋友可以参考下。
    2011-05-05
  • 一篇文章看懂SQL中的开窗函数

    一篇文章看懂SQL中的开窗函数

    开窗函数也叫分析函数有两类,一类是聚合开窗函数,一类是排序开窗函数,下面这篇文章主要给大家介绍了关于SQL中开窗函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 定位和优化mysql慢查询的常见方法分享

    定位和优化mysql慢查询的常见方法分享

    MySQL中的慢查询(Slow Query)指执行时间超过指定阈值的查询语句,默认阈值是long_query_time参数设置的秒值,MySQL有几种常见的方法可以发现和获取慢查询,接下来小编将给大家详细的介绍一下这些方法,需要的朋友可以参考下
    2023-08-08

最新评论