innodb是怎么存放数据的

innodb是mysql的一种存储引擎,在存储的时候会在磁盘中开辟一个空间来存储数据,会生成一个".ibd的文件来保存"

1)、".ibd"文件:是表的数据和索引会存放在一起
2)、".ibdata"文件:是所有的表的数据和索引存放在一起

innodb的段区间:
1):叶子段——索引btree的信息
2):非叶子段——索引btree的信息
3):回滚段——回顾的信息
4):索引段——总的索引信息

叶子段有一个区空间(extend),一个区空间有64个页空间,如果空间不满足会重新申请新的空间每一个区间1M左右的大小,每一个页的大小是16k左右(page),每一页中又有行空间(row);

row空间中存储数据长度大小,实际的表数据,文件头信息,主键索引等。。。

innodb缓池:——innodb_buffer_pool
数据页:记录操作的数据信息,(插入缓冲,锁住数据信息)
索引页:记录使用的索引的信息

innodb事物的写入过程:

mysql inner join 索引命中 mysql innodb索引结构_字段

索引:

什么是索引:听说可以提高sql的执效率,是数据库相关的重要优化手段,主要在单表下,索引不是万能的,不要以为使用索引性能一定会变高,

索引类型:
1)、主键索引,(就是我们数据表的主键)
2)、唯一索引,就是一个唯一字段建立的索引
3)、单索引,单个字段的索引
4)、联合索引,多个字段联合建立的索引
5)、全文索引,针对于全文进行的分词索引
6)、覆盖索引,是所有查询sql中追求的索引效率最完美的使用

innodb的数据结构
innodb的数据结构默认的是Btree的结构。二叉树和二分法
二分法:会不断选择一个元素作为中位数,比较左边的元素小于中位数,比较右边的元素大于中位数根据这样的方式排序,我们看到是就会是一个数的结构。

mysql inner join 索引命中 mysql innodb索引结构_字段_02


mysql inner join 索引命中 mysql innodb索引结构_主键_03

在建立平衡二叉树的时候,会对数据频繁的重构,所以这会对新增来说效率低下,如果一个表建立了很多索引,就需要对所有的索引维护