先说创建表的需要选择的类型

mysql表解绑idb和重新绑定idb文件 mysql idb文件解析_数据

讲两种类型 常用的innoDB 和 MYISAM:

这两种类型创建表后的数据文件是什么样子 :

mysql表解绑idb和重新绑定idb文件 mysql idb文件解析_mysql_02


MYISAM类型三个文件 :

1 .MYI文件 :存放索引数据;

2.MYD文件:存放表里数据的地方;

3:.frm文件:存放建表结构的地方;

InnoDB类型两个文件;

1.ibd文件:存放索引和数据的地方;

2.frm文件:存放建表结构的地方;

介绍完这个,下面来讲建表时的索引方法 :

mysql 索引有两种类型 B+tree 和 hash 方法

mysql表解绑idb和重新绑定idb文件 mysql idb文件解析_mysql_03


B+tree:先看一下模型

mysql表解绑idb和重新绑定idb文件 mysql idb文件解析_数据_04


这里能看到InnoDB 和 MYISAM类型的区别在于:

InnoDB 的叶子上放的是索引所在行的数据

MYISAM的叶子节点上方的 一个地址,指向索引所在行数据的地址,所以当根据索引找到这行数据的时候他还要去根据地址去磁盘上找到这个数据;

然后上面那些节点不存放数据!!数据都在叶子节点上;

索引的查找方法 b+tree
sql执行传过来一个值 会将根部节点的数据加载到内存中去做对比(这里内存处理比较快,但是一次数据加载这个过程是一次I/O读取的过程,这个是比较慢的);
然后跟二叉树一样一直找到叶子节点,然后如果是InnoDB的话他就可以直接得到数据因为叶子节点上就是完整的行数据;如果表示MYISAM类型的话,他得到的是一个地址,需要拿着这个地址去上面说到的.MYD文件中找到这个数据;

查找方法如果是hash的话:
创建索引的时候,nysql会将索引字段数据hash计算一下,存一个hash值然后在存一个行数据的地址以键值对的形式存在一个文件里面,当你用索引做sql查询的时候,直接将你存进来的值进行hash计算然后直接可以定位到这个数据,然后拿到这个地址去磁盘找到这行数据;

然后问一个问题为毛不直接用hash不就行了还要用b+tree;
因为hash不好做范围搜索,惊不惊喜意不意外;
还有就是B+tree的叶子节点会有一个箭头,就是每个叶子的数据头部和尾部分别会存放上一个和下一个叶子的数据地址就是为了方便范围搜索的,不用再回到根节点再一层一层I/O对比查找数据!!

网上看的图灵学院的视频,自己记录一下;