概述
最近一段时间重新深入研究了一遍MySQL的内容,今天主要分享分析MySQL索引原理,后续会输出一些关于MySQL方面的干货,希望各位小伙伴喜欢。
一、什么是索引、为什么要建立索引?
关于索引的理解,个人更加喜欢将其比喻为字典里面的目录,根据字典来进行查询的速度远大于每一页逐个逐个字排查的速度。
索引主要用于快速找出在某个列中有特定值的行,倘若不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据,而不必查找所有数据,那么将会节省很大一部分时间。
(一)、索引的存储文件是如何的?
首先我们来看看mysql索引数据的存储位置:
mysql的数据存储是存放在mysql的data文件夹底下,截图如下所示:
查看该文件夹底下,我们通常可以看到相关的信息内容:
.frm表结构文件,和所选用的存储引擎无关。
(二)、MyISAM引擎的文件格式
1、myd 数据文件后缀
2、myi 索引文件后缀
(三)、InnoDB引擎的文件格式
1、ibd 将索引信息和数据一起存储起来
二、索引的结构是什么?为何不采用别的结构?
索引在起初做设计的时候其实是有一定数据结构选型的,对于不同的数据结构基础,我做了以下 的相关总结:
(一)、使用二叉树作为索引结构缺陷
容易导致二叉树出现结构偏移,极端情况容易变成一条链