你最愿意做的哪件事,才是你的天赋所在

0%

深入理解Mysql(一)

深入理解Mysql(一)

索引数据结构

索引是帮助Mysql高效获取数据的排好序的数据结构

  • 二叉树
  • 红黑树
  • Hash表
  • B-Tree

B-Tree

B+Tree

  • 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
  • 叶子节点包含所有索引字段
  • 叶子节点用指针连接,提高区间访问性能

[图片侵删]

Mysql的每个节点的大小为

SHOW GLOBAL STATUS LIKE ‘Innodb_page_size’;

image-20201014185557191

Mysql的数据文件存储位置

Windows

在mysql目录下的data文件夹

linux

打开/etc/my.cnf 或 /etc/mysql/my.cnf,查看data的配置路径

image-20201014193512744

Mysql的存储引擎

子节点中存储一条记录中的所有信息。innodb和myisam是基于数据库表结构的概念,指的是数据库表的存储结构模型

InnoDB

文件后缀

MySQL 使用 InnoDB 存储表时,会将表的定义数据索引等信息分开存储,其中前者存储在 .frm 文件中,后者存储在 .ibd 文件中

在mysql8.0后,对文件结构进行了大概,.frm文件不存在了,而是将表的结构存放在元数据表mysq子节点中存储一条记录中的所有信息。l.ibd中,目的是为了保证在server crash的情况下,不会遗留.frm .ibd临时文件,保证了DDL操作的原子性

存储实现

磁盘管理的最小单位

页的大小可以通过修改Innodb_page_size属性来实现,修改了页的大小后,相应的分配的存储分区大小也会因此改变

Relation Between Page Size - Extent Size[图片侵删]

底层采用的是聚集索引,即索引关键字和数据一起存放

数据结果

InnoDB 存储引擎中的表都是使用索引组织的,也就是按照键的顺序存放;聚集索引就是按照表中主键的顺序构建一颗 B+ 树,并在叶节点中存放表中的行记录数据。

如果使用上面的 SQL 在数据库中创建一张表,B+ 树就会使用 id 作为索引的键,并在叶子节点中存储一条记录中的所有信息。

[图片侵删]

Clustered-Index

Myisam

Myisam采用的是辅助索引,但是它的叶节点并不包含行记录的全部数据,仅包含索引中的所有键和一个用于查找对应行记录的书签,在 InnoDB 中这个书签就是当前记录的主键。

-------------你最愿意做的哪件事才是你的天赋所在-------------