so sad啊今天,快手的面试一轮就凉了,问了spring的DispacherServlet原理,spring的对象管理方式,这些基础的spring知识,没有好好的复习而且在用的过程中只是会用,包括spring的生命周期都不知道,这是编码久了不动自己的脑子长期下来,没有主动自我的学习的能力迟早被淘汰,新东方和快手都问了索引的基本原理,之前准备mysql培训就是一知半解的还没理解透,这又是我的一个问题,学的不扎实,不做笔记过一阵就忘了。没有刷编程题,letcode、剑指offer的问题,最简单的字符串调换位置都不会。
唉算了,一切重新再来吧,先整理一下innodb的索引原理相关知识:
1. B树与B+树区别
B树每个节点都存放主键和磁盘文件地址的指针,B+树所有元素都在叶子节点,叶子节点不存放地址指针,直接存放其他列数据。
2. innodb页大小默认是16Kb,data元素都存放再叶子节点上,非叶子节点可以存放更多的元素,例如biginit占据8个字节,64位,而B+树的非叶子节点除了存放id还存放下一层元素地址6个字节,一个2千万数据大约多少层2000 0000/16/16/16...
3. MyISAM结构的文件格式有frm、myd、myi
frm 表结构信息 myd数据 myi表索引
例如在MyISAM中select * from student where id =31;表where条件有索引,去MYI文件中定位到位置,把索引对应的value(磁盘地址),快速到myd中找到
innodb结构的文件格式有 frm、ibd
frm表结构信息 ibd文件数据
ibd不存在索引所在的数据地址,而是存放其他的列的数据
4. 聚簇索引
叶子节点包含所有的记录(主键索引) 非聚簇索引 数据和索引不在一起
5. INNODB建表不设置主键时,底层会找到不重复数据当主键,如果找不到的话,增加一个列维护,我们看不到。MYISA,一级、二级索引差不多;INNODB一级、二级索引不一样,二级索引是不存其他列数据而是存主键
6. 如果使用uuid既不是自增也不是整形的,存在大量比较大小、占用磁盘空间可以使用分库分表、雪花算法
7. 为什么二级索引不是聚簇索引
INNODB自己拓展一个二级索引,将主键值加到索引列后面,把拓展组合列索引例如index:name 就变成(name,id),优化器就会根据拓展后的二级索引列来决定使用哪个索引列
8 hash索引把键和存放地址进行hash映射,hash查找得到一个值,与数据存放地址关联起来,但是hash索引弊端范围查询不行。
9. 叶子节点从小到大,依次递增,叶子节点维护指针,如果不是自增的话,会有分裂,不平衡
10. 最左匹配原则,必须按照顺序不能跳
一次面试引发的感悟
最新推荐文章于 2024-09-10 10:21:38 发布