MySQL高频面试题(真实面试版)_第1页
MySQL高频面试题(真实面试版)_第2页
MySQL高频面试题(真实面试版)_第3页
MySQL高频面试题(真实面试版)_第4页
MySQL高频面试题(真实面试版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MySQL高频面试题(真实面试版)本套面试题整理于一线企业真实面试场景,覆盖初级、中级开发高频考点,内容通俗易懂、无书面化套话,侧重实际工作应用,适合面试刷题、复盘巩固。一、MySQL基础概念面试题1.简述MySQL的存储引擎,常用的有哪些?区别是什么?MySQL存储引擎是数据表的底层存储、读写、管理方式,不同引擎特性不同,适配不同业务场景,最常用的是InnoDB和MyISAM,还有Memory、CSV等小众引擎。核心区别:InnoDB:MySQL5.5及之后默认引擎。支持事务、行锁、外键、MVCC多版本并发控制,崩溃可自动恢复,读写并发性能好,适合绝大多数业务表(订单、用户、交易数据)。缺点是存储空间占用稍大。MyISAM:老版本默认引擎。不支持事务、行锁、外键,只有表锁,并发读写差。优势是查询速度快、占用空间小、支持全文索引。适合静态数据、只读数据(日志、配置表),崩溃无法恢复数据。Memory:数据存储在内存中,重启数据清空,速度极快,适合临时缓存、临时统计数据。2.InnoDB和MyISAM的锁机制有什么不同?InnoDB默认使用行级锁,仅锁定操作的对应数据行,其他行可正常读写,并发性能高;但行锁是基于索引实现的,无索引时会降级为表锁。同时支持意向锁、间隙锁、临键锁,解决幻读问题。MyISAM只支持表级锁,操作数据时直接锁定整张表,写锁会阻塞所有读写操作,并发能力极差,仅适合低并发只读场景。3.什么是事务?事务的四大特性(ACID)是什么?事务是数据库中一组不可分割的SQL操作单元,要么全部执行成功,要么全部执行失败回滚,保证数据操作的一致性。四大特性:原子性(A):事务是最小执行单元,不可拆分,全部成功或全部回滚。一致性(C):事务执行前后,数据库数据完整性、约束规则不变,不会出现非法数据。隔离性(I):多个事务并发执行时,相互独立、互不干扰,通过隔离级别控制并发问题。持久性(D):事务提交成功后,数据永久落地,即使服务器宕机、重启,数据也不会丢失。4.MySQL四种事务隔离级别,分别解决了什么问题?默认级别是什么?数据库并发事务会出现三大问题:脏读、不可重复读、幻读,四种隔离级别逐级解决对应问题:读未提交:最低级别,允许读取未提交数据,存在脏读、不可重复读、幻读,基本不使用。读已提交:只能读取已提交事务的数据,解决脏读,存在不可重复读、幻读。Oracle默认级别。可重复读:MySQL默认隔离级别。保证同一事务内多次读取同一数据结果一致,解决脏读、不可重复读,存在幻读。MySQL通过MVCC极大降低了幻读出现概率。串行化:最高级别,事务串行执行,完全杜绝三大并发问题,但是并发性能极低,几乎不用。5.脏读、不可重复读、幻读的区别?脏读:一个事务读取到了另一个事务未提交的修改数据,后续对方回滚,导致读取的数据无效,属于严重问题。不可重复读:同一事务内,两次读取同一行数据,结果不一致,因为中间被其他事务修改并提交。侧重数据修改。幻读:同一事务内,两次查询同一条件的数据,行数不一致,因为中间被其他事务新增/删除数据。侧重数据新增、删除。二、索引核心面试题(高频重点)1.MySQL索引的底层原理是什么?为什么用B+树不用B树、哈希表?InnoDB索引底层采用B+树结构,所有数据都存储在叶子节点,非叶子节点只存储索引键和指针,用于快速检索。选择B+树的核心原因:对比B树:B树每个节点都存储数据,单次查询IO次数更多;B+树只有叶子节点存数据,树高度更低,磁盘IO更少,查询效率更稳定,且支持范围查询、排序、分页。对比哈希表:哈希表仅支持等值查询,不支持范围查询、排序、模糊查询;哈希存在冲突,数据有序性差,不适合数据库索引场景。2.聚簇索引和非聚簇索引的区别?仅InnoDB有聚簇索引概念,是MySQL核心考点:聚簇索引(主键索引):叶子节点直接存储整行完整数据,主键就是索引,数据和索引绑定在一起。一张表只能有一个聚簇索引,默认以主键创建,无主键则用唯一索引,无唯一索引则自动生成隐藏主键。非聚簇索引(二级索引/普通索引):叶子节点只存储索引列值+主键值,不存储完整数据。查询时先通过普通索引找到主键,再通过主键索引查询完整数据,这个过程叫回表。3.什么是覆盖索引?为什么要使用覆盖索引?覆盖索引指查询的所有字段,都包含在索引中,无需回表查询主键索引,直接通过二级索引获取全部数据。优势:避免回表操作,减少磁盘IO,大幅提升查询性能,是日常优化最常用的手段。例如建立索引(a,b),查询selecta,bfromtablewherea=1,就是覆盖索引。4.最左前缀原则是什么?什么时候会失效?联合索引遵循最左前缀匹配原则,查询条件需要匹配索引的最左侧字段,才能命中索引。例如联合索引(a,b,c),有效查询条件:a、a+b、a+b+c;失效场景:b、c、b+c。常见索引失效场景:不满足最左前缀原则索引列使用函数、运算、类型转换like查询以%开头or连接的字段有未索引字段MySQL优化器判断全表扫描比索引查询更快,自动放弃索引5.索引越多越好吗?为什么?不是,索引适量即可,过多索引会带来严重性能问题:索引占用磁盘空间,增加存储成本数据表增删改数据时,需要同步更新所有相关索引,降低写入性能过多索引会增加MySQL优化器的选择成本,可能导致索引选择异常原则:高频查询字段建索引,低频查询、频繁修改字段不建索引。三、SQL优化面试题1.日常SQL优化的核心思路有哪些?索引优化:避免索引失效,合理建立联合索引、覆盖索引,删除冗余无效索引SQL语句优化:避免select*,只查询需要字段;避免大表模糊查询、子查询嵌套过深;优先使用join代替子查询分页优化:深分页(limit10000,10)避免偏移量大的查询,用主键分页、延迟关联优化避免锁等待:减少长事务,拆分大事务,避免批量更新锁表表结构优化:合理字段类型,用tinyint代替int、varchar代替char,避免字段为空过多2.如何优化limit深分页问题?当limit偏移量过大时,MySQL会先扫描前面所有数据,再截取目标数据,速度极慢。常用优化方案:主键分页:whereid>上一页最后idlimit10,无偏移量,效率极高,适合有序主键场景延迟关联:先通过索引查出主键,再关联查询完整数据,减少回表开销分页缓存:前端限制最大分页页数,不允许用户查询过深页码3.selectcount(*)、count(1)、count(字段)的区别?count(*):统计表中所有有效行数,忽略null值,InnoDB底层做了优化,效率最高,日常优先使用count(1):遍历所有行,固定填充1统计,无字段判断,效率和count(*)基本一致,无明显差距count(字段):统计该字段非空行数,会判断字段是否为null,效率最低,且统计结果和前两者不同总结:统计总行数优先用count(*),不要用字段计数。四、锁机制与MVCC面试题1.InnoDB行锁、表锁、意向锁的关系?行锁:锁定单行数据,分为共享锁(读锁)、排他锁(写锁),并发性能高,基于索引生效表锁:锁定整张数据表,并发极低,无索引、索引失效、批量更新时会触发意向锁:是表级辅助锁,分为意向共享锁、意向排他锁,用来标记表内是否有行锁,避免全表扫描判断锁状态,提升锁检测效率2.什么是MVCC?作用是什么?MVCC即多版本并发控制,是InnoDB实现读写不加锁、提升并发性能的核心机制,主要用于可重复读、读已提交隔离级别。核心原理:数据修改时不会直接覆盖原数据,而是生成数据历史版本,通过undolog日志保存,读操作读取历史版本数据,写操作锁定最新数据,实现读写并发不冲突。作用:解决读写阻塞问题,提升并发性能,同时实现可重复读的隔离效果。3.什么是间隙锁、临键锁?会引发什么问题?二者都是InnoDB行锁的衍生锁,主要用于解决幻读问题,仅在可重复读隔离级别生效。间隙锁:锁定索引数据之间的空白区间,不锁定已有数据,防止其他事务在间隙内插入数据临键锁:Next-KeyLock,是行锁+间隙锁的结合,锁定当前数据行+前后间隙,是默认的锁机制常见问题:间隙锁会导致无数据也锁等待,引发死锁、事务阻塞,是线上偶尔出现莫名锁超时的主要原因。五、线上故障与高阶面试题1.MySQL慢查询如何排查?核心排查流程:开启慢查询日志,设置阈值(默认超过10秒的SQL记录日志)通过慢日志定位耗时SQL、执行次数、扫描行数用explain分析SQL执行计划,查看索引、扫描行数、是否回表、是否全表扫描针对性优化索引、改写SQL、拆分大事务优化后观测慢日志、数据库CPU、QPS变化2.什么是死锁?如何避免和解决死锁?死锁是两个或多个事务,互相持有对方需要的锁,同时等待对方释放锁,导致事务永久阻塞的现象。常见避免方案:统一SQL锁资源的访问顺序,所有事务按相同顺序更新数据拆分大事务,缩短事务执行时间,减少锁持有时长避免事务中嵌套耗时操作、查询操作设置锁超时时间,自动释放阻塞事务解决方式:MySQL会自动检测死锁,主动回滚代价最小的事务,业务侧可捕获异常重试。3.大表如何优化?千万级数据表处理方案分表分库:水平分表(按id、时间拆分数据)、垂直分表(拆分大字段、冷热数据分离)冷热分离:历史冷数据迁移至归档表,只保留近期热数据在主表索引精简:删除冗余索引,减少写入开销,保留核心查询索引读写分离:主库写、从库读,分担主库查询压力避免全表操作:禁止批量delete、update,分批操作数据4.读写分离的原理和问题?原理:搭建主从架构,主库负责新增、修改、删除写入操作,从库通过binlog日志同步主库数据,负责查询读操作,分担主库压力。核心问题:主从延迟,写入主库的数据,同步到从库存在短暂时间差,会导致写入后立即查询,读不到最新数据的问题。解决方案:核心热点查询走主库、业务层缓存、缩短同步延迟。六、基础实操面试题1.explain执行计划核心字段有哪些?重点看什么?核心关键字段及关注点:type:查询类型,优先级:system>const>eq_ref>ref>range>index>all,出现all代表全表扫描,必须优化key:实际命中的索引,为null表示未使用索引rows:扫描

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论