博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL数据库索引实现方式
阅读量:6356 次
发布时间:2019-06-23

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

  hot3.png

目前MySQL支持的索引主要有哈希索引、B+树索引、全文索引(fulltext index)、空间索引。平时用到最多的当属B+树索引。今天我们就来看看InnoDB和MyISAM存储引擎的索引实现方式。

InnoDB索引介绍

所谓的B+树是从平衡二叉树(AVL)演化来的,它是一个典型的多路平衡搜索树。

MySQL中InnoDB的B+树索引分为clustered index和non-clustered index,也就是聚集索引和非聚集索引。聚集索引是按表的主键构造一颗B+树,其叶子节点存放着整条的记录数据,非聚集索引的叶子节点只保存了主键值和对应的偏移量。下图就是一颗典型的B+树聚集索引的简化结构:

我们再来看看非聚集索引的:

区别十分明显,叶子结点上存放的数据不同,回想一下,之前说到的覆盖索引为什么查找速度会很快(不清楚的先往下看,然后再去翻翻之前文章了解)。

覆盖索引之所以快,是因为省去了二次查找,仅仅查找索引文件便可获取到所有查询所需的字段(语句查找字段,条件字段,排序字段都在一个联合索引中),非聚集索引文件本身就小很多,查找起来非常快。如果查找的字段不全在非聚集索引中,那么存储引擎就只能拿到主键之后再用主键去聚集索引中获取数据了,在数据量大的情况下就会慢很多。

接下来,我们看看MyISAM的实现方式:

无论哪种索引,键值上对应的都是数据在磁盘上的物理地址,区别只是主键索引的值不能重复而已。

通常,B+树索引效率都很高,树的高度并不高,I/O次数较少。但是,它也不是没有缺点,数据量越大,每次更新数据树的变动(保持平衡)也越大,超过一定数量后性能便会直线下降,这也是为什么大表性能低的原因。

转载于:https://my.oschina.net/90888/blog/1582149

你可能感兴趣的文章
linux 下 ifcfg-ethx配置和解析
查看>>
检查数据库的CPU和PSU补丁信息
查看>>
NETWORK_同步位置信息
查看>>
用泛型的IEqualityComparer接口去重复项 .
查看>>
[WCF-Discovery]让服务自动发送上/下线通知[原理篇]
查看>>
Devpress.XtraGrid.GridControl 笔记
查看>>
【转载】C#线程系列讲座(1):BeginInvoke和EndInvoke方法
查看>>
Delphi-ADOQuery查询、插入、删除、修改
查看>>
Android中抽屉(SlidingDrawer)的使用介绍及实例记录
查看>>
彻底了解DVD:从入门到精通(一)[转]
查看>>
使用对称算法加密解密文件
查看>>
httpModules 与 httpHandlers
查看>>
大正数相加
查看>>
Asp.net MVC3 Razor语法小记
查看>>
word中使用动态图片(GIF)的方法
查看>>
[转]HSPICE 使用流程
查看>>
FineUI v3.2.1发布了!(距离上个版本仅 7 天,给不给力?)
查看>>
播放实现Android实现图片循环播放
查看>>
WAVEHDR结构和waveOutPrepareHeader及waveOutWrite函数介绍
查看>>
ojdbc14.jar 放在kettle那个目录下面
查看>>