Mysql相关 (https: xiaolincoding.com mysql )

1, explain命令的各个字段解释

关键字段:

type 查询方式

  • ✅ 优秀: system, const, eq_ref, ref
  • ⚠️ 可接受: range, index_merge
  • 🔴 需要优化: index(全索引扫描), ALL(全表扫描)

extra 数据处理方式

索引相关
Using index
Using index condition (用到了联合索引的一部分查找,另一部分在索引树上过滤)
Using where (先走索引查找,然后在服务层过滤, 可以通过联合索引优化到Using index condition)   ----  中优先级   
排序相关
Using filesort  (order by后面的字段需要添加索引)              ----  高优先级   
Using temporary  (distinct使用覆盖索引优化,避免临时表的产生)  ----  高优先级
连接相关
Using join buffer (Block Nested Loop)(被驱动表的连接字段上创建索引)                         ----- 中优先级
Using MRR (Multi-Range Read)
其他
Impossible WHERE
Select tables optimized away
Distinct 
No tables used

rows 扫描行数

key 实际使用的索引

filtered 引擎返回的数据100条,过滤后剩下的数据的百分比20,即剩下数据为100*20% = 20条,越低表示引擎的过滤效果越差

key_len 可以分辨联合索引是否部分使用到了

2, Innodb和Myslam的区别

事务
行锁/表锁
外键
崩溃恢复
count(*)
聚簇索引和索引数据分离
myslam不支持事务,查询的时候不需要通过mvcc,直接从索引找到数据位置,然后读取数据速度更快

3,mysql架构图

alt

3.1,一条sql的执行

连接器:建立连接,管理连接、校验用户身份;
查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;
解析器:解析SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;
执行 SQL:执行 SQL 共有三个阶段:

预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列
优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划;
执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;

4,一行记录的存储

alt

变长列表和NULL列表倒序存放
compact 紧凑排列(页溢出时存放768前缀+指针) dynamic (页溢出直接存放指针20字节) compressed(压缩整个数据页)
记录头信息:delete_mask next_record(单链表 vs 同一层页节点之间是双链表) record_type, deepseek上说是记录头在最前面

5,索引

前缀索引:对字符串的前几个字符建立索引,不需要在整个字段上建立索引,这样可以减少索引占用的存储空间
联合索引:范围查询的情况下,范围查找字段后面的字段无法用到联合索引
(a,b)这个索引,a>1 and b=2 和 a>=1 and b=2的查询方式不同,确定的查询起点可以走联合索引,在页面的索引槽中找到下一个a的起始位置,举例:查找今天已经回放的sql的分片数量。 对于 >=、<=、BETWEEN、like 前缀匹配的范围查询,并不会停止匹配

#mysql#
总结面试经验 文章被收录于专栏

1111111111

全部评论

相关推荐

09-23 21:27
已编辑
四平职业大学 机器学习
面试有史以来第一次是本校学长/学姐面,但是很可惜可能G了首先自我介绍,介绍两段实习+硕士课题,先简单介绍了一下,然后让我重点详细介绍一下在蚂蚁的实习工作,就按照timeline列举了一下做了哪些工作,中间穿插一些提问然后又让我重点介绍了自己的硕士课题,聊完课题之后提问:问:是否了解内存池,如果让你设计一个动态内存池,你会有哪些考量?答:先说明自己没有做过上层的内存管理,然后从底层的内存管理介绍了一下,对数据分块、淘汰策略、数据预取等方面的一些基础的策略,然后面试官也没有追问拷打(感谢心软学姐);问:对未来的职业方向有没有自己的想法?答:说了一下自己硕士的方向与现在大模型优化技术的结合,未来可能是一个潜在的优化点,举了一个详细的例子;手撕:实现一个包含环检测功能的链表反转的代码,如果有环,返回nullptr,如果无环返回反转后的head&nbsp;node,腾讯手撕依旧考察基础,让我写完整并且打印示例,一次通过了反问:了解一下业务?答:主要做大数据,介绍了一些业务场景,然后心凉半截,因为我说的未来规划和业务场景基本上毫无关系然后又提问是否了解Ray?我没有听过,我说不了解,然后又问了一句,对其他分布式工具是否有所了解,然后就说了Megtron了解一些后续下来问室友发现Ray就是vLLM官方实现分布式的一个工具,但是之前也没有了解过
发面经攒人品
点赞 评论 收藏
分享
目前只有快手和大疆的结果没出来,后续就算约面应该也不会继续面了,国庆后直接入职了,所以简单复盘一下bg:民办本双非硕&nbsp;&nbsp;蔚来-&gt;b站-&gt;百度秋招准备:1.力扣hot100战神,实习期间疯狂刷。2.因为经历了三段找工作的八股修炼,在八月初开始看了两周就开始面试了,并且牛客重度使用者。3.实习项目熟悉,并且在后续面试不断完善。秋招timeline:八月中上旬开始大量投递简历,八月中下旬开始接到一些面试,八月底到九月初面试高峰期,有时候一天三面,九月中旬差不多面试结束,整个过程大概是一个月左右,因为学历不太好,也准备的不太够,提前批基本上没怎么投,投的也挂了。总结:首先,强烈不推荐边实习边面试,我真的非常后悔没有在八月初离职,当时是想着百度这边转正保底,结果我还是在没有任何意向的情况下就撕了,因为想着破釜成舟,当时每天白天工作晚上准备,真的非常非常累,别为了转正而堵死了秋招!我是整个秋招都在实习,后面还累的发烧了几天,完全就是透支。因为投递的早,基本上也都给面了,感觉现在真的是金八银九了,越早投越好,而且秋招流程漫长,简历过了还要笔试,整体时间跨度很长,所以真的很建议要早点投。然后选择也很重要,感觉后端真重灾区,前端会容易些。保持良好心态,慢慢准备,总会赢的!oc:百度:实习转正&nbsp;(已撕)字节:生服&nbsp;8.25一面&nbsp;&nbsp;9.02二面挂&nbsp;&nbsp;&nbsp;广告&nbsp;9.08一面&nbsp;9.10二面&nbsp;9.15三面&nbsp;9.17四面&nbsp;9.19hr面&nbsp;9.22oc滴滴:9.02一面&nbsp;9.04二面&nbsp;9.08三面&nbsp;9.18oc腾讯:8.27一面&nbsp;8.29二面&nbsp;9.02hr面&nbsp;9.11oc(需要先实习再确定能不能转正,已撕)泡池子:快手:9.01一面&nbsp;9.10二面&nbsp;9.23&nbsp;hr面大疆:8.28一面&nbsp;9.11二面面试挂:美团金服:8.27一面挂&nbsp;9.10一面还是挂钉钉:8.27一面&nbsp;9.03二面挂b站生态技术:8.26一面挂京东零售:8.18一面&nbsp;&nbsp;8.22二面&nbsp;8.30线下hr面挂米哈游增长:8.19一面挂游戏科学:8.07一面挂小红书社区:8.21一面挂识货:实习转正oc拒笔试结束:小米陌陌简历挂:阿里系除钉钉,携程,pdd筛选中:网易&nbsp;去哪儿&nbsp;小鹏&nbsp;理想
一句话证明你在找工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务