InnoDB 和 MyISAM 的数据分布是什么样的?(1)

DROP TABLE IF EXISTS test; – 若表已存在,则删除

CREATE TABLE test (

id INT NOT NULL,

num int NOT NULL,

tag CHAR(12) NOT NULL,

PRIMARY KEY(id), – 主键索引

KEY(num) – 辅助索引

– 尝试不同的引擎 MyISAM InnoDB

) ENGINE=MyISAM;

复制代码

然后插入下面的数据,id从1-9,故意把插入顺序打乱,tag代表插入顺序

INSERT test(id, num, tag) VALUES(7, 1, ‘no.1’);

INSERT test(id, num, tag) VALUES(5, 19, ‘no.2’);

INSERT test(id, num, tag) VALUES(6, 7, ‘no.3’);

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的主键

必看视频!获取2024年最新Java开发全套学习资料 备注Java

分布如下图:

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

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

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

InnoDB的数据存储

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

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
息队列、分布式存储等等面试题笔记及资料**

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值