IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 聚簇索引、二级索引、非聚簇索引 ? -> 正文阅读

[数据结构与算法]聚簇索引、二级索引、非聚簇索引 ?

在这里插入图片描述

聚簇索引与非聚簇索引分别是MySQL不同存储引擎组织索引和数据存储的两种不同方式。按照官方文档的说法,InnoDB里面,除了聚簇索引之外其他都是二级索引,也就是没有非聚簇索引,而MyISAM使用的索引都是非聚簇索引。

  • 聚簇索引:将记录和文件一起存放到B+树中的索引中,即B+树的外部叶子节点存放记录,内部节点存放索引。
  • 二级索引:InnoDB里面除了聚簇索引之外,都是二级索引,或者说是聚簇索引的辅助索引。其对应的B+树叶子节点里面存储的是主键值和相应的索引列。有的人也把二级索引叫非聚簇索引,我认为这是不合理的,因为聚簇的意思是:“把数据和索引聚在一起”。而二级索引的叶子节点也是有数据的,因此,称之为非聚簇索引是不太合适的。不过只要知道背后的原因叫什么都没关系。
  • 非聚簇索引:索引和数据分开存储在不同的文件中,B+树叶子节点存放是的记录的地址。

非聚簇索引和二级索引:

  1. 对于MyISAM来说,我们知道MyISAM的数据和索引文件是分开存储的。MyISAM的数据并没有被划分成若干数据页,而是按照用户的插入数据依次怼到一个文件里面。然后是建立对应的索引。在MyISAM里面全是非聚簇索引,并且非聚簇索引的叶子节点存储的是对应记录在数据文件中的地址。在使用索引进行查找的时候,首先通过B+树找到对应记录所在的地址,然后根据地址,再来一次IO找到真正数据。
  2. 而在InnoDB里面,索引即数据,数据即索引,也就是数据和索引是一起存储的。它的二级索引的叶子节点存储的是主键值和对应的索引列。当我们进行SELECT查找的时候,如果所查的字段被索引列包含,那么直接可以通过二级索引的叶子节点获取到数据,这叫索引覆盖。而如果所查的字段不能被索引列包含,那么就需要根据叶子节点中存储的主键id,去聚簇索引中再查一次,以获取所需的数据,这叫回表操作。所以我们在使用InnoDB存储引擎的时候,尽量不要使用SELECT * 这样的操作。
  3. InnoDB的二级索引和MyISAM的非聚簇索引和那个更高效还真不好说。如果做到索引覆盖,无疑是InnoDB更加高效,因为不用回表。但是如果都需要回表,对于InnoDB来说,还需要再查一次聚簇索引的B+树才能获取到对应的数据,而MyISAM回表的时候只需要拿着地址去数据文件中找就可以了。所以在回表的时候,MyISAM更加高效。

mysql官方文档链接:https://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:01:52  更:2022-04-26 12:05:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:22:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码