MySQL面试题笔记

617 MySQL 数据排序 实现? Order By 命中索引(包括索引字段),使用索引排序(⭐有序⭐),效率最高效 否则使用文件排序,文件少=> 内存排序 sort_buffer 文件大=>外部排序,归并排序 内部排序细节: 双路排序(待排序的列数据太大了):使用row_id(回查表) + sort_field ​ 排好序后,使用row_id将完整的记录取出来 单路排序(待排序数据大小能接受) ​ 直接拍,不会查表,直接把拍好的结果返回 外部排序: 拆分小的,外部多路归并排序,小=>大 外部归并排序 => 先分段排序,每一段调入内存执行快排 ​ => 归并阶段,因为每子段都是有序的 => 多路归并排序 589 一条SQL的执行过程 先通过连接器校验权限 利用分析器进行SQL语句词法分析和语法分析,构建解析树 利用优化器选择合适的索引和表连接顺序,最终选择一条最佳的执行计划 利用执行器,调用引擎层查询数据,返回结果集 具体:Select * from user where id = 1; SQL => Server层连接器,权限校验,账号是否有资格获取。无=> Access denied for user。 连接成功后,空闲一段时间会断开 分析器(查询解析) => 语法分析:SQL : Select类型✔️ user表✔️ id列 ✔️拆分成词,再组装为解析树。 语义分析:语法是否有误 => you have an error in your SQL syntax (字段、表|存在?) 分析解析树语法正确性 优化器(查询优化)=> ...

March 4, 2025 · 7 min · 1346 words · LongWei