博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql索引总结(2)-MySQL聚簇索引和非聚簇索引
阅读量:6256 次
发布时间:2019-06-22

本文共 858 字,大约阅读时间需要 2 分钟。

 

聚簇索引就是对磁盘上的实际数据重新组织以按照特定的一个或者多个列的值排序的算法

特点是存储数据的顺序和索引顺序一致 一般情况下主键会默认生成聚簇索引 且一张表有且只有一个聚簇索引

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

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

MySQL中不同的数据存储引擎对聚簇索引有不同的支持

MyISAM使用的是非聚簇索引

原始数据

这里写图片描述

存储方式

这里写图片描述

按照列值和行号来组织索引的 叶子节点中保存的实际上是指向存放数据块的指针

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

对于InnoDB引擎来说,是按照聚簇索引的形式存储数据

这里写图片描述

它的每个聚簇索引的叶子节点都包含主键值、事务ID、回滚指针(用于事务和MVCC)以及余下的列。

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

InnoDB的二级索引和主键索引也有很大的不同 二级索引存放的是主键值而不是行指针 减少了移动数据或者分裂时维护二级索引的开销,因为不需要更新索引的行指针

这里写图片描述

MyISAM和InnoDB的二级索引的对比

这里写图片描述

从图中可以看出 InnoDB二级索引的叶子节点存放的是KEY字段+主键值,因此首先通过二级索引查找到的是主键值,再根据主键值在朱建索引中查找到相应的数据文件。

而MyISAM的二级索引存放的还是列值和行号的组合 叶子节点中保存的是指向物理数据的指针,因此它的主建索引和二级索引的结构并没有任何区别,只是说主键索引的索引值是唯一且非空的,而MyISAM引擎可以不设置主键。

InnoDB引擎是必须设置主键的,需要依赖主键生成聚簇索引,因此当没有指定主键的时候,InnoDB引擎会默认寻找一个可以唯一标识每行数据的列作为主键,当这种列不存在的时候,会默认生成一个6字节整型的隐藏列作为主键

 

转载地址:http://tznsa.baihongyu.com/

你可能感兴趣的文章
程序员编程艺术第十二~十五章:IP访问次数,回文等问题(初稿)
查看>>
[ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)...
查看>>
设计模式(五):PROTOTYPE原型模式 -- 创建型模式
查看>>
融云rongCloud聊天室的使用
查看>>
【c/c++】内存分配大小
查看>>
《Python入门》Linux 下 Python Web开发环境搭建笔记
查看>>
[LeetCode] Binary Tree Paths 二叉树路径
查看>>
SAP Client Copy
查看>>
安卓自动生成代码插件-Android code Generator(转)
查看>>
构建一个高可扩展性javabean和jsp连接数据库操作
查看>>
JS魔法堂:Data URI Scheme介绍
查看>>
《c++primer》疑惑记录
查看>>
java的(PO,VO,TO,BO,DAO,POJO)解释
查看>>
SWT:获取字符串实际宽度
查看>>
Device Mapper Multipath(DM-Multipath)
查看>>
Web安全实践(10)攻击weblogic
查看>>
Xcode5.0使用iOS6.1SDK及模拟器
查看>>
如何编写解决方案?
查看>>
引起超时的原因及表解锁的方法<转>
查看>>
微信公众帐号开发教程第2篇-微信公众帐号的类型(普通和会议)(转)
查看>>