版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年mysql的常见面试题及答案1.基础架构类1.1请描述MySQL8.x的逻辑架构分层及各层核心作用MySQL8.x的逻辑架构分为Server层和存储引擎层两层,各模块职责清晰:连接器:负责客户端连接管理、身份认证、权限校验,连接建立后会缓存用户的权限信息,8.x默认支持caching_sha2_password加密认证,安全性远高于5.7的mysql_native_password。分析器:负责SQL的词法分析、语法分析,生成抽象语法树(AST),校验SQL语法是否合法,识别关键字、表名、字段名等元素,8.x优化了分析器的内存占用,大SQL解析速度提升30%以上。优化器:负责生成SQL的执行计划,选择最优的索引和执行路径,支持基于成本的优化(CBO)和基于规则的优化(RBO),8.x新增了索引跳跃扫描、直方图统计等特性,执行计划的准确率相比5.7提升40%以上。执行器:按照优化器生成的执行计划调用存储引擎接口执行SQL,返回执行结果,执行器会先校验用户对表的操作权限,避免越权访问。存储引擎层:负责数据的存储和读取,是插件化架构,支持InnoDB、MyISAM、Memory等引擎,8.x默认存储引擎为InnoDB,且系统表全部迁移为InnoDB,删除了5.7版本的查询缓存模块(该模块命中率低、锁竞争严重,已被官方废弃)。1.2请说明InnoDB与MyISAM的核心差异,以及当前MyISAM的适用场景核心差异如下:1.事务支持:InnoDB支持ACID事务,实现了四种隔离级别,适合需要事务保证的业务场景;MyISAM不支持事务。2.锁粒度:InnoDB支持行级锁、表级锁,行锁粒度小、并发性能高,存在死锁风险;MyISAM仅支持表级锁,并发写性能差,无死锁风险。3.索引结构:InnoDB采用聚簇索引,主键索引叶子节点存储整行数据,普通索引叶子节点存储主键值,查询普通索引需要回表;MyISAM采用非聚簇索引,主键索引和普通索引的叶子节点都存储数据行的物理地址,无需回表。4.崩溃恢复:InnoDB通过redolog、undolog实现崩溃安全,异常重启后可以自动恢复未提交的事务,不会丢数据;MyISAM不支持崩溃安全,异常重启后可能出现数据损坏。5.外键支持:InnoDB支持外键约束,保证数据的一致性;MyISAM不支持外键。当前MyISAM已经几乎被淘汰,仅在临时表、只读静态小表等极端场景下可能用到,8.x版本默认临时表也采用InnoDB引擎,MyISAM的使用占比不足1%。2.索引优化类2.1什么是聚簇索引、非聚簇索引、覆盖索引?三者的关系是什么?聚簇索引:是InnoDB的主键索引,索引的排序顺序和数据的物理存储顺序一致,叶子节点存储完整的行数据,每张表只能有一个聚簇索引,如果没有定义主键,InnoDB会自动选择一个非空唯一索引作为聚簇索引,若也不存在则生成隐藏的DB_ROW_ID作为聚簇索引。非聚簇索引:也叫二级索引、普通索引,叶子节点存储的是对应行的主键值,查询时如果需要获取索引外的字段,需要通过主键值到聚簇索引中查询整行数据,这个过程叫做回表。覆盖索引:是一种特殊的非聚簇索引,索引的字段包含了查询需要的所有字段,查询时不需要回表,直接从索引中就能获取所需数据,性能远高于需要回表的查询。三者关系:覆盖索引属于非聚簇索引的一种,非聚簇索引需要依赖聚簇索引获取完整行数据,聚簇索引的查询性能最高,覆盖索引是优化查询的核心手段之一。2.2什么是最左前缀匹配原则?8.x对该原则有什么优化?最左前缀匹配原则是B+树索引的特性:联合索引的排序规则是按照索引定义的最左侧字段优先排序,左侧字段值相同的情况下再按照下一个字段排序,因此查询时只有用到联合索引的左侧连续字段,才能用上索引,跳过左侧字段、或者在左侧字段上用范围查询时,右侧的字段无法用上索引。例如联合索引`idx(a,b,c)`,查询`wherea=1andb=2`可以用到索引的a、b字段,查询`whereb=2andc=3`跳过了a字段,无法用到索引,查询`wherea=1andb>2andc=3`,b是范围查询,c字段无法用到索引。MySQL8.0.13版本新增了索引跳跃扫描特性,当联合索引的第一个字段的基数非常低(例如性别字段只有男、女两个值)时,即使查询时没有指定第一个字段,优化器也可以通过跳跃扫描的方式用到联合索引,例如联合索引`idx(gender,age)`,查询`whereage=18`时,优化器会先枚举gender的所有取值,再分别匹配age=18的记录,避免全表扫描。2.3列举常见的索引失效场景,并举出对应示例1.索引列使用函数、运算或隐式类型转换:例如`whereyear(create_time)=2025`、`whereid+1=10`、`wherephone(phone是varchar类型,传入int值会触发隐式转换),都会导致索引失效。2.违背最左前缀匹配原则:例如联合索引`idx(a,b,c)`,查询`whereb=2andc=3`无法用到索引。3.like查询左模糊或全模糊:例如`wherenamelike'%张三'`、`wherenamelike'%张三%'`无法用到索引,右模糊`wherenamelike'张三%'`可以用到索引。4.or条件包含非索引列:例如`wherename='张三'orage=18`,如果age不是索引列,整个查询会全表扫描。5.数据分布导致优化器放弃索引:如果查询的值占表中数据的比例超过20%~30%,优化器会判断全表扫描比走索引更快,主动放弃索引,例如用户表的status字段90%都是已激活,查询`wherestatus=1`不会走索引。6.使用isnotnull过滤高比例非空字段:如果字段的非空占比很高,`isnotnull`查询会放弃索引。3.事务与锁类3.1请说明ACID四大特性的含义,以及InnoDB的实现方式ACID是事务的四大核心特性,具体含义和实现如下:原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败。InnoDB通过undolog实现原子性,事务执行的所有修改都会记录undolog,事务回滚时通过undolog反向撤销已经执行的修改。一致性(Consistency):事务执行前后数据的完整性约束不会被破坏,是事务的最终目标,需要原子性、隔离性、持久性共同保证,同时业务层也要保证逻辑的一致性。隔离性(Isolation):多个事务并发执行时,事务内部的操作对其他事务是隔离的,不会互相干扰。InnoDB通过MVCC(多版本并发控制)和锁机制实现隔离性,支持四种隔离级别。持久性(Durability):事务一旦提交,对数据的修改就是永久的,即使系统崩溃也不会丢失。InnoDB通过redolog和doublewritebuffer实现持久性,事务提交前会先写redolog并刷盘,异常重启后可以通过redolog恢复未刷到磁盘的数据,doublewritebuffer避免了redolog写入时的页损坏问题。3.2请说明四种事务隔离级别,以及InnoDB默认的可重复读(RR)级别如何解决幻读问题四种隔离级别从低到高如下:1.读未提交(ReadUncommitted):事务可以读取其他未提交事务的修改,存在脏读、不可重复读、幻读问题,几乎不会使用。2.读提交(ReadCommitted):事务只能读取其他已经提交的事务的修改,解决了脏读问题,存在不可重复读(同一个事务内两次相同查询返回的行数据不同)、幻读问题(同一个事务内两次相同范围查询返回的行数不同)。3.可重复读(RepeatableRead):InnoDB默认隔离级别,同一个事务内多次快照读的结果一致,解决了脏读、不可重复读问题,InnoDB通过技术手段解决了幻读问题。4.串行化(Serializable):所有事务串行执行,解决了所有问题,但并发性能极低,仅适合极高一致性要求的场景。InnoDB的RR级别解决幻读的方式分为两种场景:快照读(普通select查询):通过MVCC实现,同一个事务内第一次快照读时生成readview,后续所有快照读都复用这个readview,保证读取的数据版本一致,不会出现新的行。当前读(select...forupdate、insert、update、delete):通过next-keylock(间隙锁+记录锁)实现,会锁住查询条件对应的范围区间,禁止其他事务在该区间插入新的数据,避免出现幻读。如果是唯一索引的等值查询命中记录,next-keylock会退化为记录锁,减少锁范围提升并发性能。3.3请描述MVCC的实现原理,以及读提交和可重复读级别的MVCC差异MVCC(多版本并发控制)是InnoDB实现非锁定读的核心技术,通过保存数据的历史版本,让读写操作不冲突,大幅提升并发性能,实现原理如下:1.隐藏列:InnoDB的每行数据都有三个隐藏列:DB_TRX_ID(最后修改该行的事务ID)、DB_ROLL_PTR(指向undolog中该行历史版本的指针)、DB_ROW_ID(隐藏主键,无主键时生成)。2.undolog版本链:每次修改数据时,都会将旧版本写入undolog,通过DB_ROLL_PTR将多个历史版本串联成版本链,供不同事务读取。3.readview:是快照读时生成的一致性视图,包含四个核心字段:m_ids(生成readview时当前活跃的未提交事务ID集合)、min_trx_id(活跃事务的最小ID)、max_trx_id(生成readview时下一个要分配的事务ID)、creator_trx_id(当前生成readview的事务ID)。读取数据时,从版本链的最新版本开始依次判断:如果DB_TRX_ID<min_trx_id,说明该版本事务已提交,可见;如果DB_TRX_ID>=max_trx_id,说明该版本是readview生成后才开启的事务,不可见;如果DB_TRX_ID在min_trx_id和max_trx_id之间,若在m_ids中则事务未提交不可见,若不在则已提交可见。读提交和可重复读的核心差异是readview的生成时机不同:读提交级别每次快照读都会生成新的readview,所以每次都能读到最新提交的数据,会出现不可重复读;可重复读级别只有第一次快照读时生成readview,后续所有快照读都复用这个readview,所以读取的版本一致,避免了不可重复读。4.高可用架构类4.1请描述MySQL主从复制的原理,以及8.x版本的复制优化点主从复制的核心流程分为三个线程协同工作:1.主库的binlogdump线程:当从库连接主库时,主库启动该线程,负责读取主库的binlog事件,推送给从库的IO线程。2.从库的IO线程:负责接收主库推送的binlog事件,写入到本地的relaylog(中继日志)中。3.从库的SQL线程:负责读取并重放relaylog中的事件,将数据同步到从库本地。8.x版本针对主从复制做了大量优化,核心包括:无损半同步复制:将半同步的ack等待时机从存储引擎提交后调整到存储引擎提交前,保证主库crash时至少有一个从库已经收到binlog,不会出现数据丢失,数据一致性大幅提升。基于writeset的并行复制:5.7版本仅支持按库并行复制,8.x版本支持基于事务writeset的并行复制,同一个组提交的事务只要没有行冲突,就可以在从库并行重放,同步速度提升5~10倍,主从延迟大幅降低。MGR(MySQL组复制):官方原生的分布式强一致复制方案,基于Paxos算法,支持单主、多主模式,自动故障转移,数据强一致,不需要依赖第三方组件,2025年已经成为主流高可用方案之一,成熟度相比5.7版本提升60%以上。4.2请说明读写分离的实现方式和常见问题及解决方案读写分离的实现方式分为三类:1.应用层实现:通过Sharding-JDBC、动态数据源等组件在应用层实现SQL路由,代码侵入性低,不需要额外部署组件,适合中小规模团队。2.代理层实现:通过ProxySQL、MyCat等代理中间件实现,所有SQL都经过代理层路由,对应用层透明,支持复杂的路由规则,适合大规模集群。3.云厂商RDS自带:阿里云、腾讯云等云厂商的RDS都自带读写分离功能,开箱即用,不需要运维,适合上云的业务。读写分离的常见问题是主从延迟导致的读写不一致,解决方案包括:1.强一致性要求的查询直接路由到主库,避免延迟问题。2.配置延迟阈值路由,当从库延迟超过阈值时,自动将查询路由到主库。3.开启基于writeset的并行复制、优化大事务、升级从库硬件,降低主从延迟。4.启用会话一致性规则,同一个会话内写操作之后的所有读操作都路由到主库,保证用户自己的写操作能立刻看到。5.新特性与调优类5.1请说明MySQL8.4LTS版本的核心新特性(2024年发布的最新长期支持版本,2025年已逐步普及)1.性能优化:InnoDB缓冲池管理优化,降低大内存实例(128G以上)的全局锁竞争,读写混合负载性能提升15%以上;redolog写入优化,高并发写场景下吞吐量提升20%。2.功能增强:支持SQL标准的EXCEPT、INTERSECT集合运算符,简化差集、交集查询;支持DDL进度跟踪,通过showprocesslist、performance_schema可以查看ALTERTABLE等DDL操作的完成百分比;新增动态权限,支持自定义权限粒度,不需要再授权超级权限。3.安全增强:默认禁用LOCALINFILE,避免文件读取漏洞;默认启用TLS1.3,连接安全性提升;支持密码复杂度策略的自定义配置,强制高风险场景使用强密码。4.运维优化:慢查询日志支持采样功能,可以设置采样比例,大幅减少慢日志的磁盘占用;支持在线调整redolog大小,不需要重启实例;支持大页内存的自动配置,降低内存碎片。5.2请描述线上MySQLCPU使用率100%的排查流程1.确认进程归属:用top、htop命令确认高CPU占用的进程是否为mysqld,如果是其他进程导致的CPU高,优先处理其他进程。2.排查异常SQL:登录MySQL执行`showprocesslist`,查看正在执行的SQL,重点关注状态为Sendingdata、Copyingtotmptable、Sortingresult的SQL,若有执行时间过长的异常大查询,先kill掉临时恢复业务。3.分析慢查询日志:通过pt-query-digest分析最近10分钟的慢查询日志,找出TopN的慢SQL,查看这些SQL是否没有走索引、是否有大分页、全表扫描、临时表排序等问题。4.针对性优化:给慢SQL添加合适的联合索引、覆盖索引,优化SQL写法(例如limit100000,10改为子查询先查主键再关联),拆分大事务,避免长事务。5.排查其他原因:如果没有慢SQL,排查是否是连接数打满导致的CPU高,调整wait_timeout、interactive_timeout参数,使用连接池复用连接;排查是否有大量锁等待导致的CPU消耗,通过`performance_schema.data_locks`查看锁持有情况,kill持有锁的长事务。5.3请说明explain执行计划的核心字段解读规则explain是分析SQL执行计划的核心工具,核心字段的解读规则如下:type:表示访问类型,性能从优到差依次为system>const>eq_ref>ref>range>index>ALL,其中range及以上级别才算合格的索引命中,ALL是全表扫描,必须优化。key:表示实际用到的索引,如果为NULL说明没有走索引,需要优化。rows:表示优化器预估需要扫描的行数,数值越大性能越差。Extra:表示额外的执行信息,`Usingindex`说明用到了覆盖索引,性能最优;`Usingwhere`说明用到了where条件过滤;`Usingtemporary`说明用到了临时表,通常出现在groupby、orderby场景,需要优化;`Usingfilesort`说明用到了外部排序,无法用索引排序,需要优化。6.运维实践类6.1请说明大表DDL的优化方案,以及各方案的适用场景大表DDL指的是对数据量超过1000万的表执行ALTERTABLE操作,核心需求是避免锁表影响业务,常见方案如下:1.8.xOnlineDDL:8.x版本大部分DDL操作支持OnlineDDL,执行过程中仅持有短暂的元数据锁,不阻塞DML操作,适合表数据量在5000万以下的场景,操作简单,不需要第三方工具。2.gh-ost:GitHub开源的DDL工具,基于binlog同步数据,原理是创建影子表,修改影子表结构,同步主表的增量数据到影子表,数据同步一致后短暂锁表切换表名,没有触发器开销,对业务影响极小,适合5000万以上的大表,是当前最主流的大表DDL方案。3.pt-online-schema-change:Percona开源的DDL工具,基于触发器同步增量数据,比gh-ost重,存在触发器的性能开销,适合不支持binlogrow模式的场景,目前使用占比逐步降低。4.分批执行:如果是加字段、加索引等操作,也可以在业务低峰期按主键范围分批修改,或者对分库分表的表逐张执行,避免一次性操作影响整个业务。6.2请说明分库分表的适用场景、拆分策略和常见问题解决方案适用场景:单表数据量超过5000万或者单表容量超过10G,SQL优化、索引优化、读写分离已经无法满足性能要求,且写QPS超过1万,存在明显的性能瓶颈时,才考虑分库分表,能不拆分尽量不拆分,避免增加架构复杂度。拆分策略:1.垂直拆分:按业务字段拆分,将大表拆分为多个关联的小表,例如用户表拆分为用户基本信息表、用户扩展信息表、用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公小机械制造工持续改进强化考核试卷含答案
- 直播销售员岗前深度考核试卷含答案
- 有色金属熔池熔炼炉工安全宣传能力考核试卷含答案
- 工业清洗工保密意识模拟考核试卷含答案
- 筛运焦工岗前日常考核试卷含答案
- 档案数字化管理师岗位危机应对考核试卷含答案
- 陶瓷烧成工安全知识竞赛考核试卷含答案
- 印花工操作安全考核试卷含答案
- 生殖健康咨询师工作知识考核试卷含答案
- 空调器制造工岗前安全检查考核试卷含答案
- 初中地理课堂教学设计
- 公司资质文件模板
- 《基础临床营养学》课件
- 道路车辆 视野 驾驶员眼睛位置眼椭圆的确定方法 编制说明
- 国家基层糖尿病防治管理指南2022
- 季节性传染病预防
- 智能化运维知识培训课件
- 城市建设项目投资合作框架协议
- GB/Z 44047-2024漂浮式海上风力发电机组设计要求
- 水闸工程管理规程DB41-T 1972-2020
- 年轻恒牙的牙髓治疗
评论
0/150
提交评论