聚簇,其实是相对于InnoDB这个数据库引擎来说的,因此在将聚簇索引的时候,我们通过InnoDB和MyISAM这两个MySQL的数据库引擎展开。

InnoDB和MyISAM的数据分布对比

首先通过以上SQL语句创建出一个表格,其中col1是主键,两列数据均创建了索引。然后我们数据的主键取值为1-10000,按照随机的顺序插入数据库中。

MyISAM的数据分布

MyISAM的数据存储逻辑比较简单,就是按照数据插入的顺序创建出一个数据表格。直观上来看如下图:

可以看出,数据就是按照插入的顺序“一行一行”生成的。前面还会有一个行号的字段,用处就是在查找到索引的时候能够快速地定位到该行索引的位置。

我们再来看一下具体的细节:

上图展示的情况就是在MyISAM引擎下,按照主键建立的索引的具体实现。可以看出在主键按照顺序排列在叶子结点上的同时,节点中还存储着这个主键在数据库表格中存在的具体的行号,正如我们上面所说的,这个行号可以帮助我们快速地定位到表中数据的位置,也可以把这个行号理解为一个指针,指向了这个主键所在的具体数据行。

那么如果我们按照col2建立索引呢?会有什么不同吗?答案是不会的:

所以得到的结论就是在MyISAM中建立索引是否是主键索引其实是没有区别的,唯一不同的就是这是一个“主键的索引”。

InnoDB的数据分布

因为InnoDB支持聚簇索引,所以会与MyISAM上的索引实现方式有所区别。

我们先看看基于主键的聚簇索引在InnoDB上的实现方式:

首先,和MyISAM上的主键索引一样,这里的索引的叶子结点上同样也是包括了主键的值,并且主键的值是按照顺序排列的。不同的是,每一个叶子结点还包括了事务id,回滚指针和其他非主键列的值(这里指的col2)。所以我们可以理解为InnoDB上的聚簇索引,是将原来表格中的所有的行数据按照主键进行排列然后放在了索引的叶子节点上。这就是一个与MyISAM在主键索引上的一个不同。 MyISAM的主键索引在查找到对应的主键值之后需要通过指针(行号)再去表中找到相对应的数据行,而InnoDB的主键索引,将数据信息全部放在了索引里面,可以直接在索引中查找拿到。

再来看看InnoDB中的二级索引的情况:

可以看到,和InnoDB中的主键索引不同,二级索引并没有在叶子结点存储所有的行数据信息,而是除了索引列的值外,只存储了这个数据行所对应的主键的信息。我们知道在MyISAM中,二级索引和主键索引一样,除了索引列的值外,只存储了一个指针(行号)的信息。

对比一下两个引擎上的二级索引。即存储指针和存储主键值的优劣。

首先存储主键值会比只存储一个指针带来的空间开销更大。但是当我们数据表在进行分裂或者其他改变结构的操作的时候,存储主键值的索引并不会收到影响,而存储指针的索引,可能就要重新进行更新维护。

用一个图对两个引擎中的两种索引进行对比:

总结

到此这篇关于MySQL学习教程之聚簇索引的文章就介绍到这了,更多相关MySQL聚簇索引内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://segmentfault.com/a/1190000037713190

mysql建立聚族索引语句,MySQL学习教程之聚簇索引相关推荐

  1. mysql建立聚族索引语句_mysql聚集索引

    微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引)-- (一) ...

  2. 在mysql中unique唯一索引的作用_MySQL_MySQL中的唯一索引的简单学习教程,mysql 唯一索引UNIQUE一般用于不 - phpStudy...

    MySQL中的唯一索引的简单学习教程 mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQU ...

  3. Mysql调优及索引锁机制学习

    Mysql 存储引擎简介 查看存储引擎 在mysql中,我们可以使用以下两个命令来查看当前使用和mysql默认支持的存储引擎. show engines; show variables like '% ...

  4. 数据库知识梳理——Mysql建立、删除索引及使用

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  5. mysql优化器放弃索引场景,MYSQL索引优化(索引失效场景)

    学习mysql是作为一名Java工程师必不可少的事情,但是我们只认识mysql的增删查改建表等等的sql语句其实远远不够的,对于进阶mysql来说,索引是一个很重要的部分.下面我们就来说一下在mysq ...

  6. 55:Mysql用户管理|常用sql语句|mysql数据库备份恢复

    2019独角兽企业重金招聘Python工程师标准>>> 1.Mysql用户管理: 场景,为了安全,新建的站点,创建新的用户,或者给已有用户授权,对某个库或者某个表有权限: 语法: g ...

  7. mysql建立表间键关系,MySQL外键(表与表之间的关系)

    外键:用来建立两张表之间的关系 键语法:foreign key(当前表中建立观念西的外键字段)references 被关联表名(id)三种表与表之间的关系一对多 多对多 一对一 研究表与表之间的关系如 ...

  8. mysql建立学生成绩_JSP+SSM+Mysql实现的学生成绩管理系统

    项目简介 本系统是基于JSP+SSM+Mysql实现的学生成绩管理系统.主要实现的功能有教师管理.学生管理.课程管理.学生成绩管理. 难度等级:中等 技术栈 编辑器 Eclipse Version: ...

  9. pdo mysql like_PHP PDO准备的语句-MySQL LIKE查询

    我正在尝试通过php的PDO类(mysql驱动程序)进行搜索.我在MySQL客户端上使用以下查询(更改表名以保护无辜者): SELECT    hs.hs_pk, hs.hs_text, hs.hs_ ...

  10. mysql查询未使用索引,监控MySQL中未使用的索引

    I have a set of servers where the maintenance query execution takes long. This is due to the indexes ...

最新文章

  1. centos 配置bond_Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
  2. leetcode算法题--格雷编码
  3. 【数据结构与算法】之深入解析“用Rand7()实现Rand10()”的求解思路与算法示例
  4. 分布式 虚拟时间和虚拟同步_分布式虚拟跟踪
  5. 论文浅尝 | 基于知识图的问答变分推理
  6. 阿里第一颗芯片问世,平头哥发布最强AI芯片含光800
  7. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示
  8. 台达伺服电机选型手册_机械加工工艺师手册_打包下载
  9. python二维向量运算模拟_Python数学基础之向量定义与向量运算(附代码)
  10. UNP Chapter 19 - 多播
  11. Hype教程,如何设置字体样式?
  12. linux C语言基础学习总结
  13. 安科瑞变电站综合自动化系统在变电站的应用-Susie 周
  14. 组策略 计算机配置 安全设置,使用组策略配置 Windows 防火墙设置
  15. 计算机系统维护课程设计报告,计算机系统维护工程(第2版)
  16. 用四叉树管理散布在平面上的对象
  17. HEU euler path
  18. cordova应用兼容iOS11+和iPhoneX刘海屏
  19. Java深克隆和浅克隆的原理及实现
  20. 分享105个NET源码ASP源码,总有一款适合您

热门文章

  1. consul服务注册与服务发现的巨坑
  2. 【转】进程死锁及解决方法
  3. 译DevExpress v16.1更新说明(WinForms篇)
  4. Java数据结构——二叉树
  5. 论如何优雅的处理回文串 - 回文自动机详解.
  6. 新闻发布系统,我学会了什么?
  7. (转)SQL Server 数据类型映射
  8. loadrunner要点总结
  9. Head First设计模式之命令模式
  10. [工具]PyCharm激活、注册码无效解决办法