Mysql中的两种储存引擎

//存储引擎这个概念是用来形容每张表的;

1.MylSAM存储引擎:

在这里插入图片描述
使用MylSAM存储表,在文件中可以发现该表有三个文件组成:
在这里插入图片描述
其中.frm结尾的用来记录表的结构;
.MYD结尾的用来存储表中数据行的记录;
.MYI结尾的存储表中的索引字段(B+树结构);

查找的过程:
eg: Col1=49
1.首先Col1是索引字段,从MYI文件中查找该索引是否存在;
2.若存在,则按照从B+树的结构进行查找,找到该索引对应的磁盘文件地址;
3.按照磁盘文件地址一次性在MYD文件中定位到所要查询的数据;
在这里插入图片描述

2.InnoDB存储引擎:

在这里插入图片描述
使用InnoDB存储表,在文件中可以发现该表有两个文件组成:
在这里插入图片描述
其中.frm结尾的用来记录表的结构;
.ibd结尾的用来存储表中数据文件和索引文件的合并;
在这里插入图片描述

InnoDB中叶子节点包含了整个数据内容,这样的称为聚集索引,反之称为非聚集索引;

问题1:为什么InnoDB表必须要有主键,且推荐使用整型的自增主键?

1.因为表本身使用B+树来存储索引的,所以必须要有主键;(若建InnoDB表时没有主动的创建主键,则Mysql会自动的选择数据表中某个不重复的一列作为主键,若找不到唯一可以作为索引的一列,则会自动生成一列类似于rowId的一列自增数据作为主键)
2.在查找的过程中,需要不断地进行比对,采用整型可以加快比较的速度,若表中使用UUID主键,则显而易见 1<2 的比较 比 abc和ab11 两个字符串之间的比较(需要转换成ASCII,且需要一位一位的比较,很麻烦) 更为简单;
从存储空间来看,整型也比UUID类型的更省空间,节约资源;
3.如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页;
4.如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值