mysql 面试题 介绍mysql b+树 、索引、日志、锁、事务等内容。 索引:为什么使用索引。索引什么时候失效、什么是覆盖索引和索引下推。 日子:redolog 、binlog、mysql写日志两阶段提交 、write ahead log 锁: mysql 支持的锁类型,幻读,间隙锁。 MySQL是世界上最流行的关系型数据库管理系统之一,其面试题通常涵盖了数据库的核心概念和技术,如索引、日志、锁和事务管理。以下是对这些知识点的详细解释: 1. **SQL执行步骤**: 当一个MySQL语句被提交时,它会经历一系列的处理阶段。客户端与服务器建立连接,然后验证用户身份并授予相应的权限。如果查询存在于查询缓存中,服务器直接返回结果,否则继续执行。接着,分析器解析SQL语句,进行词法和语法分析。之后,优化器决定最佳执行计划。执行器检查用户是否有执行权限,并调用存储引擎接口获取数据。如果启用了查询缓存,查询结果会被缓存。 2. **使用索引的原因**: 索引的主要目的是提高数据查询速度,类似于书籍的目录,使数据查找更快。创建唯一性索引可确保表中每一行的唯一性,避免重复数据。此外,索引有助于避免排序和临时表的创建,将随机IO转化为顺序IO,这对于表连接尤其有益。 3. **InnoDB为何选择B+树作为索引结构**: InnoDB选择B+树主要是因为它适合范围查询和排序,同时可以减少磁盘I/O。B+树的所有叶子节点通过指针连接,适合顺序遍历,而B树中非叶子节点存储数据可能导致更多的随机I/O。此外,B+树的非叶子节点只存储键,使得数据页的大小更一致,有利于缓存。 4. **导致索引失效的操作**: - 使用左侧或左右模糊匹配(like '%xx' 或 like 'xx%')会使索引失效,因为无法直接通过索引定位数据。 - 在索引上应用函数或表达式,如`lower(column)`,会使索引不可用。 - 使用`OR`条件且其中一个列未索引,可能导致全表扫描。 - 隐式类型转换也会使索引失效,因为数据库可能会将索引列与非索引列进行不同类型的比较。 5. **覆盖索引和索引下推**: 覆盖索引是指查询只需要从索引中获取所有所需数据,无需回表到原始数据行。这减少了数据访问次数,提高了性能。索引下推是MySQL 5.6引入的优化,它允许在遍历索引时就过滤掉不符合条件的记录,减少回表次数。 6. **redo log的作用**: redo log用于在MySQL崩溃后恢复数据一致性。它是WAL(Write-Ahead Logging)的一部分,记录了对InnoDB表页的修改。即使数据未立即写入磁盘,redo log也能确保在异常重启后恢复这些变更。 7. **redo log的crash-safe能力**: redo log的循环写入特性使其能够标识哪些数据已刷盘,哪些未刷盘,而binlog仅追加记录全量日志。在崩溃后,redo log可以直接重放内存中未持久化的更改,而binlog无法提供这种信息。此外,redo log每次更新操作完成后立即写入,如果写入失败,表示操作失败,事务也不会提交。 8. **数据库崩溃后的数据恢复**: 数据库崩溃后,恢复未刷盘的数据依赖于redo log和binlog的联合使用。根据redo log的状态,可以重放未持久化的更改;而binlog提供了一个完整的事务历史,用于恢复整个事务。 MySQL的高效运行依赖于合理的索引设计、日志系统和事务管理策略。理解并掌握这些核心概念对于优化数据库性能和保证数据完整性至关重要。





























剩余22页未读,继续阅读


- 粉丝: 170
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于JSP的校园网站的设计与实现论文.doc
- 利用单片机制作简单万年历.doc
- 正确选择财务管理软件[会计实务-会计实操].doc
- 学校开展“2022年网络安全宣传周”活动方案.docx
- 系统集成-大屏监控系统使用说明书.doc
- 普通高中语文教学导向深度学习实践研究方案.doc
- 计算机网络技术模拟试题及答案(最终).doc
- 幼儿园语言文字领导小组网络图.pdf
- 网络防火墙需求分析.doc
- 在Excel中判断单元格是否包含日期【会计实务操作教程】.pptx
- 井下人员定位系统与通信联络系统.ppt
- (源码)基于C++ROS框架的机器人控制系统.zip
- 工程项目管理团队建设.ppt
- 教你如何选择合适的财务软件 .pdf
- 基于单片机的AD转换电路与程序设计.doc
- 网络分析仪E6607C操作指导.ppt


