版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年mysql数据库常见面试题及答案1.MySQL8.0、8.4LTS相较于5.7的核心差异是什么?5.7版本已于2023年10月官方停止维护,当前2025年企业生产环境主流使用8.0稳定版或2024年发布的8.4LTS(长期支持版,支持到2032年),核心差异如下:架构层:8.x版本废弃了MyISAM系统表,所有元数据存储于InnoDB数据字典,移除了.frm文件,支持原子DDL,DDL执行失败会完全回滚,不会出现5.7版本中数据字典和实际表结构不一致的问题;默认字符集从latin1改为utf8mb4,原生支持emoji和所有Unicode字符,无需手动修改配置。功能层:新增窗口函数、公共表表达式(CTE)、JSON数据类型的增删改查增强、正则表达式函数增强;8.0.27版本后支持并行DML,批量写入性能提升40%以上;8.4版本默认移除了PASSWORD()、OLD_PASSWORD()等不安全加密函数,默认开启TLS1.3连接加密,支持透明数据加密(TDE)原生集成。性能层:InnoDB缓冲池支持自动调整大小,无需重启;重做日志(redolog)组提交优化,高并发写场景下TPS较5.7提升30%以上;8.4版本默认优化了内核参数,innodb_buffer_pool_size默认占用物理内存的50%,max_connections默认从151提升至1000,降低入门运维配置错误概率。运维层:支持基于逻辑时钟的并行复制,主从同步延迟较5.7的库级并行复制降低80%以上;支持GTID自动故障转移,主库宕机后切换时间从分钟级缩短到秒级;8.4版本支持DDL执行进度实时查询、在线调整缓冲池大小等功能。2.InnoDB与MyISAM的核心区别是什么?当前生产环境几乎不再使用MyISAM,仅极少数只读静态小表场景可能使用,核心差异如下:特性InnoDBMyISAM事务支持支持ACID事务,适合高并发写场景不支持事务锁粒度行级锁(默认),并发写冲突概率低仅支持表级锁,并发写性能极差崩溃恢复基于redolog+undolog实现崩溃安全恢复,数据不会损坏无事务日志,崩溃后数据容易损坏,需要手动修复索引结构聚簇索引,主键索引与数据存储在一起,二级索引存储主键值非聚簇索引,索引与数据分离,所有索引叶子节点存储数据物理地址MVCC支持多版本并发控制,读写不阻塞不支持,读操作会阻塞写,写操作会阻塞所有读外键支持支持外键约束不支持count(*)性能无where条件时需要扫描索引统计行数,大表性能较低存储了表总行数常量,无where条件时count(*)性能极高聚簇索引是InnoDB特有的索引结构,一个表只能有一个聚簇索引:默认以主键作为聚簇索引,若没有显式主键则选择第一个非空唯一索引,若都不存在则InnoDB自动生成6字节的隐藏rowid作为聚簇索引;聚簇索引的叶子节点存储整行数据,访问聚簇索引即可直接拿到所有字段值,无需额外IO。非聚簇索引也叫二级索引,InnoDB的二级索引叶子节点存储索引列值+对应的主键值,一个表可以建多个二级索引;MyISAM的所有索引均为非聚簇索引,叶子节点存储数据的物理地址。回表指的是当查询的字段未完全包含在二级索引中时,需要先通过二级索引拿到主键值,再到聚簇索引中查询完整行数据的过程,会额外产生一次IO。触发场景包括:1.查询字段未被二级索引覆盖,如二级索引为(name),查询语句为selectname,agefromuserwherename='xxx',age不在索引列中;2.使用select*查询,且未命中聚簇索引;3.二级索引为联合索引,但查询字段超出了联合索引的覆盖范围。避免回表的核心方式是使用覆盖索引,即让查询所需的所有字段都包含在联合索引中。4.联合索引的最左匹配原则是什么?有哪些例外场景?最左匹配原则指联合索引按照创建时的列顺序从左到右匹配,遇到范围查询(>、<、between、like左模糊)时会停止匹配后续的列。例如联合索引(a,b,c),wherea=1andb>2andc=3时,仅a和b列会用到索引,c列无法用到;whereb=2anda=1时优化器会自动调整条件顺序,仍然可以用到全部三列索引。例外场景包括:1.索引跳跃扫描(MySQL8.0+支持):当联合索引的第一列枚举值极少时,比如联合索引(gender,phone),gender仅包含男、女两个枚举值,查询wherephone='13xxxx'时,优化器可以通过跳跃扫描直接用到该联合索引,无需携带gender条件。2.覆盖索引场景:如果查询的所有字段都包含在联合索引中,即使不满足最左前缀,优化器也可能选择索引全扫描,性能优于全表扫描。3.强制索引:使用forceindex语法人为指定使用联合索引,绕过最左匹配规则。5.什么是索引下推(ICP)?优化原理是什么?索引下推是MySQL5.6版本后推出的默认开启的优化特性,参数为optimizer_switch='index_condition_pushdown=on'。优化原理:没有ICP的情况下,存储引擎层先根据最左匹配原则找到符合条件的主键,返回给Server层,Server层再对剩余的where条件进行过滤;开启ICP后,将可以通过索引判断的where条件下推到存储引擎层,存储引擎层直接在索引遍历过程中过滤不符合条件的行,仅返回符合条件的主键给Server层,大幅减少了回表次数和数据传输量。例如联合索引(name,age),查询wherenamelike'张%'andage=18,无ICP时存储引擎会返回所有姓张的行主键,Server层再过滤age=18的行;有ICP时存储引擎直接在索引层过滤出姓张且年龄为18的行,仅返回符合条件的主键,性能提升明显。6.简述ACID四大特性,InnoDB是如何实现的?原子性(Atomicity):事务是不可分割的最小执行单元,所有操作要么全部成功要么全部失败。InnoDB通过undolog实现,事务执行过程中出错或执行rollback时,会通过undolog中存储的历史数据回滚到事务开启前的状态。一致性(Consistency):事务执行前后,数据的完整性约束不会被破坏,包括主键约束、唯一约束、外键约束以及业务逻辑约束。一致性由数据库层的约束校验+业务层的逻辑实现共同保证。隔离性(Isolation):多个事务并发执行时互相不干扰,不会出现数据混乱。InnoDB通过事务隔离级别、锁机制、MVCC共同实现。持久性(Durability):事务一旦提交,对数据的修改就是永久的,即使系统崩溃也不会丢失。InnoDB通过预写式日志(WAL)实现,事务提交前先将修改记录写入redolog并持久化到磁盘,即使数据库崩溃,重启后也可以通过redolog恢复已提交事务的修改,无需等待数据页刷入磁盘。7.事务的四个隔离级别分别解决了什么问题?存在什么缺陷?首先明确三个读异常:脏读(读到其他事务未提交的数据)、不可重复读(同一个事务内两次查询同一行数据结果不同,中间被其他事务修改并提交)、幻读(同一个事务内两次相同范围查询结果行数不同,中间其他事务插入了符合条件的行并提交)。四个隔离级别:1.读未提交(READUNCOMMITTED):最低隔离级别,未解决任何读异常,会出现脏读、不可重复读、幻读,生产环境几乎不使用。2.读已提交(READCOMMITTED,RC):解决了脏读问题,仅能读到其他事务已提交的数据,存在不可重复读、幻读问题,是多数互联网企业的默认隔离级别,并发性能高,绝大多数业务场景可以接受不可重复读。3.可重复读(REPEATABLEREAD,RR,InnoDB默认隔离级别):解决了脏读、不可重复读问题,同一个事务内的所有查询都是事务开启时刻的快照;InnoDB的RR级别通过临键锁(Next-KeyLock)+间隙锁解决了幻读问题,符合SQL标准的隔离级别的同时保证了并发性能。4.串行化(SERIALIZABLE):最高隔离级别,所有事务串行执行,解决了所有读异常,但并发性能极差,仅极少数对数据一致性要求极高且并发量极低的场景使用。8.InnoDB的行锁、表锁、意向锁、间隙锁、临键锁分别是什么?适用场景?表锁:锁定整个表,粒度最大,冲突概率最高,分为表读锁和表写锁,读锁之间兼容,读写、写写互斥;DDL操作会自动触发表锁,手动加锁语法为locktablexxxread/write,生产环境尽量避免手动加表锁。行锁:锁定单行数据,粒度最小,冲突概率最低,分为共享锁(S锁)和排他锁(X锁),S锁与S锁兼容,S锁与X锁、X锁与X锁互斥;select...forupdate、update、delete操作都会自动给命中的行加X锁,普通快照读不加锁。意向锁:表级锁,分为意向共享锁(IS)和意向排他锁(IX),是加行锁前自动添加的表级标记,用于快速判断表内是否存在行锁,避免遍历所有行判断锁状态,提升加表锁的效率;意向锁之间全部兼容,IS仅与表写锁互斥,IX与表读锁、表写锁都互斥。间隙锁:锁定索引之间的间隙,不包含行本身,仅在RR隔离级别下生效,目的是防止幻读;例如索引值为1、3、5,查询whereid>3时会锁定(3,5)、(5,+∞)两个间隙,防止其他事务插入id=4、6等符合条件的行;间隙锁之间不互斥,仅插入操作会与间隙锁冲突。临键锁(Next-KeyLock):行锁+间隙锁的组合,左开右闭区间,是InnoDB行锁的默认算法;例如索引值为1、3、5时,临键锁区间为(-∞,1]、(1,3]、(3,5]、(5,+∞);当命中唯一索引且为等值查询时,临键锁会退化为行锁,范围查询时默认使用临键锁避免幻读。9.什么是死锁?InnoDB如何处理死锁?怎么避免死锁?死锁指两个或多个事务互相持有对方需要的锁,同时等待对方释放锁,导致无限等待的情况,产生的四个必要条件为互斥、持有并等待、不可剥夺、循环等待。InnoDB处理死锁的两种方式:1.超时回滚:参数innodb_lock_wait_timeout默认50秒,超过等待时间后自动回滚持有锁权重更低的事务(修改行数更少的事务)。2.主动死锁检测:默认开启innodb_deadlock_detect=on,后台线程主动检测循环等待的死锁链路,检测到后立即回滚权重最小的事务,无需等待超时。避免死锁的方案:1.不同业务访问多表的顺序保持一致,例如所有业务都先操作A表再操作B表,避免出现一个事务先A后B、另一个先B后A的情况。2.尽量使用小事务,避免大事务长时间持有锁,减少锁冲突概率。3.等值查询优先使用唯一索引,避免间隙锁带来的不必要的锁范围扩大;可以将隔离级别调整为RC,减少间隙锁的产生。4.避免一次锁定过多的行,拆分大的批量更新为多个小批量操作。10.慢查询优化的完整流程是什么?1.采集慢SQL:开启慢查询日志,参数slow_query_log=on,long_query_time设置为业务可接受的阈值(通常1秒),开启log_queries_not_using_indexes=on记录未走索引的查询,log_throttle_queries_not_using_indexes限制每分钟记录的未走索引的SQL数量,避免日志暴涨。2.分析慢SQL:使用pt-query-digest或mysqldumpslow工具分析慢查询日志,按执行次数、累计耗时、扫描行数排序,筛选出TopN慢SQL。3.执行计划分析:使用explain分析慢SQL的执行计划,重点关注:type列(连接类型,优先达到range、ref级别,避免all全表扫描)、key列(实际用到的索引,是否和预期一致)、rows列(扫描的行数,扫描行数越多性能越差)、Extra列(避免出现usingfilesort文件排序、usingtemporary临时表)。4.优化落地:索引优化:添加合适的联合索引,优先使用覆盖索引避免回表,移除冗余索引、重复索引降低写性能损耗。SQL优化:避免select*,只查询需要的字段;避免在索引列上做函数运算、类型转换、隐式编码转换;避免like左模糊查询、大的in子查询;拆分多表join为单表查询,最多关联3张表。表结构优化:大字段拆分到单独的扩展表,避免行溢出;使用更小的字段类型,例如tinyint代替int,varchar长度按需设置,避免使用text、blob等大字段存储小数据。架构优化:单表数据量超过千万级时做冷热数据分离、分库分表;复杂多维度查询同步到Elasticsearch等检索引擎,降低MySQL查询压力。11.MySQL主从复制的原理是什么?8.x版本有什么优化?主从复制基于三个线程实现:主库的binlogdump线程、从库的IO线程、从库的SQL线程。1.主库将所有数据修改操作记录到二进制日志binlog中。2.从库的IO线程连接主库,请求同步指定位点之后的binlog,主库的dump线程将binlog内容增量发送给从库。3.从库的IO线程将收到的binlog写入本地中继日志relaylog中。4.从库的SQL线程重放relaylog中的操作,将修改同步到本地存储,保证主从数据一致。8.x版本的核心优化:1.基于逻辑时钟的并行复制:同一个库内的事务只要没有写冲突就可以并行重放,解决了5.7版本仅支持库级并行复制的问题,主从同步延迟降低80%以上。2.无损半同步复制:主库等待至少一个从库将binlog写入relaylog并落盘后,才给客户端返回事务提交成功,保证主库宕机时数据零丢失。3.binlog事务压缩:binlog默认采用ROW格式的同时支持事务压缩,binlog大小减少50%以上,降低网络传输和存储成本。4.GTID自动故障转移:基于全局事务ID(GTID)实现主从切换时无需手动查找binlog位点,切换时间从分钟级缩短到秒级。12.什么是MVCC?实现原理是什么?MVCC即多版本并发控制,作用是实现读写不阻塞,大幅提升数据库并发性能,仅在RC、RR隔离级别下生效。实现原理基于undolog版本链+ReadView(读视图):1.每行数据都有两个隐藏字段:trx_id(最近修改该行的事务ID)、roll_pointer(指向undolog中该行的历史版本);每次修改数据时都会生成一个新的版本,roll_pointer指向旧版本,形成undolog版本链。2.ReadView是事务开启查询时生成的读快照,包含四个核心字段:m_ids(当前活跃的未提交的事务ID集合)、min_trx_id(当前活跃事务的最小ID)、max_trx_id(下一个要分配的事务ID)、creator_trx_id(当前事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市轨道交通行车调度员保密测试考核试卷含答案
- 茶叶精制工岗前岗位实操考核试卷含答案
- 1,4-丁二醇装置操作工岗前理论技能考核试卷含答案
- 2025年全国通信专业技术人员职业水平考试试题和答案
- 2025年教师招聘考试(心理健康教育)(中小学)综合能力测试题及答案
- 2025年河南教师资格证《综合素质》真题答案
- 2026年秋季开学小学红色基因收心班会课件
- 2026及未来5年中国极可善水剂数据监测研究报告
- 2026及未来5年中国普通床垫弹簧数据监测研究报告
- 2025年4月自考00160审计学历年真题及答案
- 2026年公司中秋、国庆安全应急预案
- 成人高尿酸血症与痛风食养指南(2024年版)
- 2026年山东省泰安市中考生物试卷附答案
- 丝印网板管理办法
- GB/T 45901-2025船舶与海上技术螺旋桨空化观测和船体压力测量的全尺寸试验方法
- GB/T 45681-2025铸钢件补焊通用技术规范
- 2025年云南省中考历史真题【含答案、解析】
- 房屋安全培训课件
- 四年级上册语文课文必背内容
- 患者隐私保护培训课件
- 合同签署确认
评论
0/150
提交评论