非聚簇索引

索引节点的叶子页面就好比一片叶子。叶子头便是索引键值。

先创建一张表:

CREATE TABLE `user` (

`id`INT NOT NULL,

`name`VARCHAR NOT NULL,

`class`VARCHAR NOT NULL);

对于MYISAM引擎,如果创建 id 和 name 为索引。对于下面查询:

select * from user where id = 1

会利用索引,先在索引树中快速检索到 id,但是要想取到id对应行数据,必须找到改行数据在硬盘中的存储位置,因此MYISAM引擎的索引 叶子页面上不仅存储了主键id 还存储着 数据存储的地址信息。如图:

像这样的索引就称为非聚簇索引。

非聚簇索引的二级索引与主键索引类似。假设我们对name添加索引,那么name的索引树叶子将是如下结构:

聚簇索引

对于 非聚簇索引 来说,每次通过索引检索到所需行号后,还需要通过叶子上的磁盘地址去磁盘内取数据(回行)消耗时间。为了优化这部分回行取数据时间,InnoDB 引擎采用了聚簇索引。

聚簇索引,即将数据存入索引叶子页面上。对于 InnoDB 引擎来说,叶子页面不再存该行对应的地址,而是直接存储数据:

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

ps. 关于查询时间,一般认为 MyISAM 牺牲了功能换取了性能,查询更快。但事实并不一定如此。多数情况下,MyISAM 确实比

InnoDB 查的快 。但是查询时间受多方面因素影响。InnoDB 查询变慢得原因是因为支持事务、回滚等等,使得

InnoDB的叶子页面实际上还包含有事务id(换句话说就是版本号) 以及回滚指针。

在二级索引方面, InnoDB 与 MyISAM 有很大区别。

InnoDB默认对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。一般来说,InnoDB

会以聚簇索引的形式来存储实际的数据,它是其它二级索引的基础。

假设对 InnoDB 引擎上表name字段加索引,那么name索引叶子页面则只会存储主键id:

检索时,先通过name索引树找到主索引id,再通过id在主索引树的聚簇索引叶子页面取出数据。

mysql 聚簇_mysql索引总结(3)-MySQL聚簇索引和非聚簇索引相关推荐

  1. mysql innodb 聚簇_MySQL InnoDB 聚簇索引和非聚簇索引

    每个 InnoDB 表都有一个称为 「 聚簇索引 」 的特殊索引,通常情况下,这个聚簇索引就是 「 主键 」( primary key ) .Innodb 使用它存储表中每一行的数据. 如果想要从 查 ...

  2. mysql精讲_Mysql 索引精讲

    开门见山,直接上图,下面的思维导图即是现在要讲的内容,可以先有个印象- 常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略 1.常见索引类型(实现层面) ...

  3. 聚簇索引mysql语句_mysql索引之聚簇索引与非聚簇索引

    1 数据结构及算法基础 1.1 索引的本质 官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构 本质:索引是数据结构 查询是数据库的最主要功能之一.我们都希望查询速度能尽可能快,因此数 ...

  4. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

    转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...

  5. mysql聚簇和非聚簇索引

    都是B+树的数据结构 聚簇索引:将数据存储和索引放到一起,都是按照一定的顺序组织,找到索引也找到了数据,数据的物理存储和索引顺序是一致的,即:只要索引相连,那么对应的数据一定也是相邻存储在磁盘上的 非 ...

  6. mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

    点击上方 小伟后端笔记 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 作者:小小木的博客来源:cnblogs.com/wyc1994666/p/10831039.html 序 开门见山,直接上图 ...

  7. MySQL索引:聚簇索引和非聚簇索引的区别

    目录 1.聚簇索引和非聚簇索引的概念 2.两者详细介绍 2.1 聚簇索引 2.2 非聚簇索引 3. 两者的区别 3.1 数据存储方式 3.2 二级索引查询 1.聚簇索引和非聚簇索引的概念 数据库表的索 ...

  8. mysql 聚簇索引和非聚簇索引_MySql聚簇索引与非聚簇索引的区别

    通常情况下,建立索引是加快查询速度的有效手段.但索引不是万能的,靠索 引并不能实现对所有数据的快速存取.事实上,如果索引策略和数据检索需求严重不符的话,建立索引反而会降低查询性能.因此在实际使用当中, ...

  9. MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引

    一.索引类型 索引根据底层实现可分为B-Tree索引和哈希索引,大部分时候我们使用的都是B-Tree索引,因为它良好的性能和特性更适合于构建高并发系统. 根据索引的存储方式来划分,索引可以分为聚簇索引 ...

最新文章

  1. 自动化测试和测试自动化的区别
  2. Response.ContentType所有类型例举
  3. PHP 拓展 开发,开发php扩展
  4. boost::python::converter::is_object_manager相关的测试程序
  5. 下拉刷新:继承listView控件
  6. linux常用命令-压缩解压命令
  7. mysql5.7 新建远程用户_Centos7中 mysql5.7 用户 创建 、授权、远程登录
  8. 活动页面html设计,活动查看页面.html
  9. PHP文字转语音排号声音_有那种很好用的文字转语音配音软件吗?
  10. php 判断百度浏览器版本,jquery获取浏览器类型和版本号的方法
  11. linux内核工程导论,Linux内核工程导论——内存管理(3)
  12. java做jsp问题_java/jsp中 中文问题详解
  13. 【Oracle】Oracle分析函数详解
  14. C语言科学计数法常量,科学计数法c语言
  15. popwindow详解
  16. 输入法半角和全角的快捷转换_华宇拼音输入法 一款完全免费的国产输入法_应用新闻-产经频道-中文科技资讯...
  17. java 编程题 实现双色球抽奖游戏中奖号码的生成
  18. ipcam的几个概念
  19. Unity Shader 之 简单实现物体被压扁(top顶点的逐渐与bottom顶点重合)的效果
  20. k8s-生产级别构建DeployMent

热门文章

  1. Mac 系统部署Frp内网穿透服务 实现frpc shell启动脚本启动、停止
  2. Spring Framework源码编译,开始Spring源码学习
  3. vue :key的说明 看到这文章,解决你的疑问
  4. 【Python】政府工作报告词云
  5. 使用React,TypeScript和Socket.io构建聊天应用
  6. 谷歌编码_如何通过学习编码赢得Google之旅
  7. 原型和原型链原型继承_原型还是不原型:这就是问题所在。
  8. firstchild.data与childNodes[0].nodeValue意思
  9. 手把手教你进行pip换源,让你的Python库下载嗖嗖的
  10. HTML class和id