2024年最新InnoDB-和-MyISAM-的数据分布是什么样的?,2024年最新12道web前端高级面试题目

最后

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

INSERT test(id, num, tag) VALUES(9, 5, ‘no.4’);
INSERT test(id, num, tag) VALUES(3, 13, ‘no.5’);
INSERT test(id, num, tag) VALUES(4, 17, ‘no.6’);
INSERT test(id, num, tag) VALUES(2, 3, ‘no.7’);
INSERT test(id, num, tag) VALUES(8, 23, ‘no.8’);
INSERT test(id, num, tag) VALUES(1, 11, ‘no.9’);
复制代码

MyISAM的数据存储

MyISAM按照数据插入的顺序存储在磁盘上,我们假设第一行数据在数据库表文件中的偏移位置是1,以此类推。 如下图

现在我们验证一下,使用 SELECT * FROM test; 扫描全表(SELECT * 不会使用任何索引,可以用 explain 实际观察下),输出的顺序正是我们sql插入的顺序,大家可以调整sql的顺序再次插入,观察输出顺序。

搞清楚了MyISAM的数据存储方式,再来看下主键索引的存储。我们假设每个磁盘块只能存储两个节点数据,MyISAM的主键分布如下图:

其实MyISAM的二级索引和主键索引并无区别,只是名称不同罢了,二级索引key(num)分布如下图:

二级索引子节点也只存储了索引列(num)和文件的偏移量(P),但可以看出num是有序的,这在范围查找(比如:where num > 3)是非常有利的,但文件的偏移量并没有规律,当需要回表查询其他字段,可能会导致多次随机I/O。

当对增加数据时MyISAM直接添加到文件尾部,不需要移动其他数据,而且更新主键时,也不会导致其他行数据移动,但它不支持行级锁,修改时直接锁表。若不需要事务支持,对读多写少的场景可以考虑MyISAM引擎,但不要默认使用MyISAM引擎。

InnoDB的数据存储

InnoDB支持聚簇索引,所以使用非常不同的方式存储同样的数据。InnoDB数据存储方式如下图:

注意整个树和MyISAM的主键索引非常类似,唯一的区别是叶子节点,InnoDB的叶子节点存储了整个行数据(id、num、tag),而不是只有索引。聚簇索引“就是”整个表,而不像MyISAM那样需要单独的行存储文件。当更新主键id时,可能会导致数据行移动,因为索引和数据是存储在一起的。若主键id是乱序写入的,InnoDB不得不做页分裂操作时,至少会导致修改三个页(分裂产生的两个页,以及他们的父节点页面),而不是一个页,这和MyISAM新增数据时添加到文件尾部很不一样。所以使用InnoDB引擎尽可能的按主键顺序插入数据。

InnoDB的二级索引和聚簇索引也不一样。InnoDB二级索引的叶子节点中存储的不是行数据的“偏移量”,而是主键值。这意味着通过二级索引查找行数据,存储引擎需要找到二级索引的叶子节点获得对应的主键值,然后根据这个值去聚簇索引中查找到对应的行数据。这里做了重复的工作:两次B-Tree查找,而不是一次。这样的策略减少了当出现行移动或者数据页分裂时二级索引的维护工作。二级索引的数据分布如下图:

如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引InnoDB会隐式的定义一个主键作为聚簇索引。选择主键最好是自增id,如果采用字符串当做主键,不仅仅会增加聚簇索引的大小,也会增加二级索引的大小(二级索引叶子节点包含主键值),并且字符串匹配需要一个个字符判断,更加降低索引的查找性能。当然某些场景使用字符串作为主键带来的优势要比这些损失更有利,需要根据场景具体评估。

文末

技术是没有终点的,也是学不完的,最重要的是活着、不秃。

零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。

最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。

高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足,不容易犯困。

技术学到手后,找工作的时候一定要好好准备一份简历,不要无头苍蝇一样去海投简历,容易“竹篮打水一场空”。好好的准备一下简历,毕竟是找工作的敲门砖。

拿到面试邀请后,在面试的过程中一定要大大方方,尽力把自己学到的知识舒适地表达出来,不要因为是自学就不够自信,给面试官一个好的印象,面试成功的几率就会大很多,加油吧,骚年!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

真实项目实战+最新讲解视频】](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值