MySQL高频面试题(梯度排序+详细实战答案)_第1页
MySQL高频面试题(梯度排序+详细实战答案)_第2页
MySQL高频面试题(梯度排序+详细实战答案)_第3页
MySQL高频面试题(梯度排序+详细实战答案)_第4页
MySQL高频面试题(梯度排序+详细实战答案)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

MySQL高频面试题(梯度排序+详细实战答案)本次面试题按面试考察频率、知识点梯度排序,从基础必问到进阶实战,适配初级、中级开发面试。答案均为工作实战总结,简洁精准、贴合面试官提问痛点,无冗余理论。一、基础必问(入门高频,100%考察)1、MySQL常用数据类型有哪些?区别是什么?核心分类及实战区别:1)数值类型-tinyint:1字节,范围-128~127,常用作状态字段(0/1/2)-int:4字节,常规整数主键、数字字段首选-bigint:8字节,超长数值、雪花ID、订单ID必用-decimal:定点数,精准存储小数,金额、财务字段必须用,禁止用float/double(存在精度丢失)2)字符串类型-char(n):固定长度,查询速度快,适合固定长度数据(手机号、身份证、编码),不足长度自动补空格-varchar(n):可变长度,节省存储空间,日常名称、地址、备注通用,最大长度受行大小限制-text:大文本,存储超长内容(文章内容、富文本),不支持索引3)时间类型-datetime:8字节,范围广,可存任意时间,不受时区影响,项目通用-timestamp:4字节,范围1970-2038,受时区影响,基本淘汰-date:仅日期,time:仅时间,按需使用2、char和varchar的核心区别?工作中怎么选型?核心区别:1)存储方式:char固定长度,定义多少字符就占用多少空间;varchar可变长度,仅存储实际数据长度2)性能:char检索速度更快,无需计算长度;varchar略有损耗3)尾部空格:char会自动补空格,查询时忽略尾部空格;varchar严格保留空格选型原则:固定长度字段(手机号、身份证、字典编码、状态码)用char;长短不固定的字段(用户名、备注、地址)统一用varchar。3、MySQL存储引擎有哪些?InnoDB和MyISAM区别?MySQL默认引擎为InnoDB,主流仅用InnoDB,MyISAM基本淘汰。核心区别:1)事务:InnoDB支持事务、ACID;MyISAM不支持2)锁机制:InnoDB行级锁+表级锁;MyISAM仅表级锁,并发极差3)外键:InnoDB支持外键;MyISAM不支持4)崩溃恢复:InnoDB支持事务日志崩溃恢复;MyISAM崩溃易数据损坏5)索引:InnoDB主键索引聚簇;MyISAM非聚簇工作选型:所有业务表一律使用InnoDB。4、什么是MySQL事务?事务的四大特性ACID?事务是一组SQL语句的执行单元,要么全部执行成功,要么全部失败回滚,保证数据一致性。ACID四大特性:-原子性(A):事务不可分割,整体成功或整体回滚-一致性(C):事务执行前后,数据整体状态合法、约束有效-隔离性(I):多个事务并发执行,互不干扰-持久性(D):事务提交后,数据永久落地,崩溃不丢失二、事务与隔离级别(中频核心,面试必问)5、MySQL四大事务隔离级别?默认级别是什么?隔离级别从低到高,并发性能递减,数据安全性递增:1)读未提交:能读取其他事务未提交数据,会出现脏读,基本不用2)读已提交:只能读取其他事务已提交数据,解决脏读,存在不可重复读(Oracle默认)3)可重复读:同一事务内,多次读取同一数据结果一致,解决脏读、不可重复读,存在幻读(MySQLInnoDB默认级别)4)串行化:最高级别,事务串行执行,无并发问题,无脏读、不可重复读、幻读,性能极低6、脏读、不可重复读、幻读的区别?怎么解决?1)脏读:一个事务读取到另一个事务未提交的脏数据,对方回滚后,读取的数据无效。解决:提升至「读已提交」及以上级别。2)不可重复读:同一事务内,两次查询同一数据,结果不一致(其他事务中途修改并提交)。解决:提升至「可重复读」及以上级别。3)幻读:同一事务内,范围查询数据,前后条数不一致(其他事务新增/删除数据并提交)。InnoDB在可重复读级别下,通过间隙锁+临键锁解决大部分幻读问题,彻底解决需串行化。7、InnoDB行锁、表锁、间隙锁、临键锁讲解1)表级锁:锁住整张表,开销小、并发低。无索引、索引失效、全表查询时,InnoDB会降级为表锁。2)行级锁:精准锁住单行数据,并发高。仅命中有效索引的等值查询才会触发行锁。3)间隙锁:锁住索引数据之间的空隙,防止其他事务插入数据,专门解决幻读,仅在可重复读级别生效。4)临键锁:InnoDB默认锁机制,是「行锁+间隙锁」的结合,锁住当前索引行+前后间隙,彻底杜绝区间幻读。工作重点:开发中尽量保证查询走索引,避免行锁降级为表锁,导致并发阻塞。三、索引核心高频(面试重中之重)8、什么是索引?索引的优缺点?索引是数据库为表字段建立的快速查询数据的结构化目录,类比书籍目录。优点:大幅提升查询速度、减少数据库IO、降低排序分组开销。缺点:占用磁盘空间;新增、修改、删除数据时,需要同步更新索引,降低写入性能。核心结论:查询多、更新少的字段建索引;更新频繁、数据量小的表不建索引。9、InnoDB索引分类?聚簇索引和非聚簇索引区别?索引分类:主键索引(聚簇)、唯一索引、普通索引、联合索引、全文索引。核心区别:1)聚簇索引:主键索引,叶子节点直接存储整行数据,一张表仅有一个,InnoDB必须有聚簇索引(无主键则用唯一索引,无则自动生成隐藏主键)。2)非聚簇索引(二级索引):普通索引、联合索引都属于此类,叶子节点仅存储主键值,查询到数据后需要回表查询整行数据。10、什么是回表?什么是覆盖索引?回表:通过二级索引查询到主键后,再通过主键索引查询完整行数据,多一次索引查询IO,性能损耗。覆盖索引:查询的所有字段,全部包含在二级索引中,无需回表,直接从索引获取数据,性能最优。示例:建立联合索引(name,age),执行selectname,agefromuserwherename='xxx',触发覆盖索引。11、联合索引最左匹配原则?失效场景?最左前缀原则:联合索引遵循从左到右依次匹配,查询条件必须命中最左侧字段,索引才会生效。例:索引(a,b,c),wherea=1生效;wherea=1andb=2生效;whereb=2直接失效。常见索引失效场景(高频):1)不满足最左前缀原则2)索引字段使用函数、运算、类型转换3)like以%开头(%xxx),后置%(xxx%)不失效4)or连接无索引字段5)in、exists数据量过大6)字段隐式类型转换(字符串字段传数字)12、为什么索引结构用B+树,不用B树、哈希表?1)对比B树:B+树所有数据都在叶子节点,非叶子节点只存索引键,层级更少、IO次数更少;所有叶子节点有序,适合范围查询、排序分组。2)对比哈希表:哈希表仅支持精准等值查询,不支持范围查询、排序、模糊查询;存在哈希冲突,数据不稳定,无法满足数据库常用查询场景。补充:B+树叶子节点双向链表,遍历全表、范围查询效率极高,完美适配MySQL业务场景。四、SQL优化高频(实战面试核心)13、如何定位慢SQL?慢查询优化流程?定位方式:开启MySQL慢查询日志,设置阈值(默认1秒),记录执行超时的SQL;线上可通过explain、showprocesslist实时分析。标准优化流程:1)用explain分析执行计划,查看是否走索引、索引类型、扫描行数2)优化索引:新增缺失索引、优化联合索引顺序、避免索引失效3)优化SQL语句:避免select*、避免函数运算、优化like、拆分大SQL4)优化业务:减少大事务、避免全表扫描、分页优化14、explain核心字段含义?重点看哪几个?日常面试只需要掌握5个核心字段:1)type:查询类型,优先级system>const>eq_ref>ref>range>index>all,最差是all全表扫描,业务必须避免2)key:实际生效的索引,null表示未走索引3)rows:扫描行数,数值越小性能越好4)Extra:额外信息,出现Usingfilesort(文件排序)、Usingtemporary(临时表)需要重点优化5)possible_keys:理论可用索引,可参考优化索引设计15、limit分页深度过大怎么优化?问题:limit100000,10会先扫描10万行数据,再丢弃,性能极差。优化方案(实战常用):1)主键索引覆盖分页:先通过主键limit查出id,再关联查询数据示例:select*fromuserwhereidin(selectidfromuserlimit100000,10)2)业务层面优化:禁止深度分页,前端做页码限制、滚动加载3)基于最后一条数据id分页:whereid>上一页最后idlimit10,性能最优16、groupby、orderby慢怎么优化?核心原因:无索引导致Usingtemporary、Usingfilesort。优化方案:建立联合索引,遵循where、groupby、orderby顺序,让排序、分组直接走索引有序性,避免文件排序和临时表。五、高阶面试题(中高级开发必问)17、MySQL主从复制原理?核心流程:1)主库:执行增删改SQL,记录数据变更到binlog二进制日志2)从库IO线程:实时拉取主库binlog日志,写入本地relay中继日志3)从库SQL线程:读取中继日志,重放SQL,同步主库数据作用:读写分离、数据备份、故障切换、负载均衡。18、主从延迟的原因及解决方案?常见原因:1)主库写入并发量大,从库单线程重放日志跟不上2)从库硬件配置低于主库3)主库存在大事务、大批量数据写入4)网络延迟解决方案:1)开启从库并行复制2)拆分大事务,避免批量一次性写入3)优化硬件、提升网络带宽4)核心业务读主库,非核心读从库19、什么是读写分离?工作中如何落地?读写分离是将数据库读操作分发到从库,写操作落到主库,分担主库压力,提升并发能力。落地方式:1)代码层手动区分:新增/修改/删除走主库,查询走从库2)

温馨提示

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

评论

0/150

提交评论