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官方实现分布式的一个工具,但是之前也没有了解过
发面经攒人品
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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