MySQL与Oracle高频面试题及详细答案(实操版)_第1页
MySQL与Oracle高频面试题及详细答案(实操版)_第2页
MySQL与Oracle高频面试题及详细答案(实操版)_第3页
MySQL与Oracle高频面试题及详细答案(实操版)_第4页
MySQL与Oracle高频面试题及详细答案(实操版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

MySQL与Oracle高频面试题及详细答案(实操版)本题库整理互联网、后端开发、数据运维岗位高频数据库面试题,涵盖MySQL、Oracle基础语法、事务、索引、优化、特性差异、实操问题等核心考点,答案贴合企业实际工作场景,简洁实用、无冗余理论。第一部分MySQL高频面试题(含答案)一、基础概念类1.简述MySQL的事务四大特性(ACID)事务四大特性是数据库事务的核心规范,分别为:原子性:一个事务内的所有SQL操作,要么全部执行成功,要么全部回滚失败,不会出现部分执行的情况,是事务的基础特性。一致性:事务执行前后,数据库的整体数据约束、业务规则保持一致,不会出现非法数据,比如转账场景中,总金额不会凭空增加或减少。隔离性:多个事务并发执行时,相互之间互不干扰,数据库通过不同的隔离级别,控制并发事务的读写冲突。持久性:事务提交成功后,数据的修改会永久写入磁盘,即使服务器断电、重启,数据也不会丢失。2.MySQL有哪些事务隔离级别?默认级别是什么?MySQLInnoDB引擎支持4种隔离级别,隔离级别从低到高依次为:读未提交:允许事务读取其他事务未提交的数据,会出现脏读、不可重复读、幻读问题,实际业务几乎不用。读已提交:只能读取其他事务已提交的数据,解决了脏读,但会出现不可重复读问题,是Oracle默认隔离级别。可重复读:同一个事务内,多次读取同一数据,结果始终一致,解决了脏读、不可重复读,是MySQLInnoDB默认隔离级别,会存在幻读问题。串行化:最高隔离级别,事务串行执行,完全杜绝脏读、不可重复读、幻读,但并发性能极差,仅用于数据一致性要求极高的场景。3.脏读、不可重复读、幻读的区别是什么?脏读:一个事务读取到了另一个事务未提交的修改数据,后续对方事务回滚,导致读取的数据无效,是最严重的并发问题。不可重复读:同一个事务内,两次读取同一行数据,期间被其他事务修改并提交,导致两次查询结果不一致,聚焦于单行数据修改。幻读:同一个事务内,两次范围查询,期间被其他事务插入/删除数据并提交,导致两次查询的数据集数量不一致,聚焦于数据行的增减。二、索引优化类4.InnoDB和MyISAM索引的区别?各自适用场景?1.存储结构:InnoDB是聚簇索引,主键索引的叶子节点存储完整数据行,二级索引存储主键值;MyISAM是非聚簇索引,索引和数据文件分离,索引叶子节点存储数据行地址。2.事务支持:InnoDB支持事务、行级锁、外键;MyISAM不支持事务、外键,仅支持表级锁。3.并发性能:InnoDB行锁粒度小,并发读写性能高;MyISAM表锁冲突严重,写操作会阻塞所有读写。4.崩溃恢复:InnoDB支持事务日志,断电后可快速恢复数据;MyISAM崩溃后容易数据损坏,修复成本高。适用场景:InnoDB是默认引擎,适用于绝大多数增删改查频繁、需要事务的业务;MyISAM仅适用于静态数据、只读多、极少修改的场景,比如日志归档、静态配置表。5.什么是索引失效?列举常见的索引失效场景索引失效指查询语句本该走索引,却触发全表扫描,导致查询性能大幅下降,常见场景:1.索引列使用函数、运算操作,如select*fromuserwhereleft(name,2)='张三'、age+1=20;2.索引列使用不等于(!=、<>)、isnotnull,无法精准定位索引区间;3.模糊查询以%开头,如like'%张三',无法匹配索引前缀;4.隐式类型转换,字符串字段传入数值、数值字段传入字符串;5.联合索引不遵循最左匹配原则,跳过前置索引列直接查询后置列;6.MySQL优化器判断全表扫描比索引查询更快,比如数据量极小、索引区分度极低的场景。6.联合索引的最左匹配原则是什么?联合索引是多个字段组合的索引,最左匹配原则指:查询条件必须匹配联合索引的最左侧连续字段,索引才会生效。举例:联合索引(a,b,c),查询条件wherea=1、wherea=1andb=2、wherea=1andb=2andc=3均可走索引;仅whereb=2、wherec=3、whereb=2andc=3会索引失效。补充:匹配到最左字段后,中间字段不能中断,后续字段可无序,同时查询条件的范围查询(>、<、between)之后的字段,无法触发索引。三、实操问题与优化类7.MySQL行锁和表锁的区别?什么场景触发行锁/表锁?表锁:锁定整张数据表,锁粒度大、冲突概率高、并发差,加锁快、无死锁。行锁:锁定数据表中的单行或多行数据,锁粒度小、并发性能高,加锁慢、可能产生死锁,仅InnoDB支持。触发场景:1.MyISAM所有增删改操作默认触发表锁;2.InnoDB中,查询/修改条件命中索引,触发行锁;3.InnoDB中,查询/修改条件未命中索引、索引失效,会升级为表锁;4.执行altertable等表结构修改语句,固定触发表锁。8.如何解决MySQL慢查询问题?完整优化思路1.定位慢SQL:开启慢查询日志,设置阈值(默认10秒),抓取执行耗时过长的语句;通过explain分析SQL执行计划,查看是否走索引、扫描行数、锁状态。2.SQL语句优化:避免select*,只查询所需字段;杜绝索引失效写法;优化join、子查询,避免嵌套过深;拆分复杂大SQL,减少单语句执行耗时。3.索引优化:为高频查询、筛选、排序、分组字段建立索引;删除冗余、无效索引;遵循联合索引最左匹配原则。4.架构优化:大表分库分表,减少单表数据量;读写分离,读请求走从库、写请求走主库;引入缓存(Redis),减少数据库查询压力。5.配置优化:调整数据库连接池、缓冲区、日志参数,适配服务器硬件配置。9.MySQL分页查询越深越慢的原因?如何优化?原因:传统limitm,n分页,数据库会先扫描前m条数据并丢弃,再读取n条数据,分页越深,扫描和丢弃的数据量越大,IO消耗越高,性能急剧下降。优化方案:1.主键分页(推荐):利用自增主键有序特性,通过where主键偏移替代limit偏移,如whereid>1000limit10;2.延迟关联:先通过索引查询出主键,再关联查询完整数据,减少全表扫描开销;3.业务限制:前端限制最大分页页数,避免深度分页场景;4.大数据量场景使用分库分表、ES替代数据库分页。第二部分Oracle高频面试题(含答案)一、基础与核心特性类1.Oracle和MySQL最核心的区别是什么?1.定位差异:Oracle是商用重型数据库,主打高可用、高可靠、高并发,付费使用;MySQL是开源轻量数据库,轻量化、部署简单、免费开源,适配互联网高并发场景。2.事务与隔离:Oracle默认隔离级别为读已提交,无幻读问题;MySQL默认可重复读,存在幻读;Oracle事务锁机制更稳定,死锁概率更低。3.架构差异:Oracle支持表空间、角色、权限精细化管理,数据存储分层更规范;MySQL以库、表为核心,权限管理相对简单。4.并发与锁:Oracle支持行级锁、共享锁、排他锁,锁机制完善,读写不冲突;MySQLInnoDB读写存在轻微冲突。5.功能差异:Oracle自带分区表、物化视图、备份恢复、流式复制等企业级功能;MySQL部分高级功能需依赖插件或第三方工具。2.Oracle的事务特点,以及事务提交、回滚机制Oracle事务默认手动提交,执行DML语句(增删改)后,数据仅缓存于内存,不会立即写入磁盘,需手动执行commit提交、rollback回滚。核心机制:依赖undo日志和redo日志,undo日志用于存储数据修改前的镜像,支撑事务回滚、读一致性;redo日志用于记录数据修改操作,用于断电、故障后的数据恢复,保证持久性。区别于MySQL:MySQL默认自动提交,单条SQL执行后自动提交事务,Oracle必须手动commit,否则事务一直占用锁资源。3.什么是Oracle读一致性?读一致性是Oracle核心特性,指所有查询操作,只会读取查询开始时刻的数据库快照数据,不会读取其他事务未提交或中途修改的数据。优势:彻底避免脏读问题,同时保证同一个事务内多次查询结果一致,无需过高的隔离级别即可保证数据稳定,兼顾了数据一致性和并发性能,这也是Oracle默认读已提交隔离级别却性能优异的核心原因。二、索引、锁与优化类4.Oracle有哪些常用索引类型?各自用途?1.B树索引:默认索引类型,适配绝大多数等值、范围查询,结构稳定、查询效率高,是业务最常用索引。2.位图索引:适合低基数列(字段值重复率高,如性别、状态),存储空间小、查询快,不适合频繁修改的字段。3.唯一索引:限制字段值唯一,杜绝重复数据,同时提升查询效率。4.函数索引:针对字段函数运算查询场景,如upper(name)、substr(time,1,10),提前缓存函数运算结果,避免查询时运算导致索引失效。5.复合索引:多字段组合索引,遵循最左前缀原则,和MySQL联合索引逻辑一致。5.Oracle行锁、表锁、共享锁、排他锁的区别共享锁(S锁):读锁,多个事务可同时加共享锁,互不冲突,仅禁止其他事务加排他锁,用于数据查询。排他锁(X锁):写锁,一个事务加排他锁后,其他事务无法加任何锁,禁止读写,用于数据增删改。行锁:锁定单行数据,粒度最小,并发性能最高,DML语句精准命中索引时触发。表锁:锁定整张数据表,粒度最大,并发差,执行DDL语句、未命中索引的DML语句触发。6.Oracle慢SQL优化的核心步骤1.抓取慢SQL:通过awr报告、v$sql视图定位耗时高、逻辑读多、执行频繁的慢语句;2.分析执行计划:通过explainplan查看索引使用、表连接方式、扫描类型,定位性能瓶颈;3.索引优化:缺失索引则新建索引,索引失效则改写SQL、创建函数索引;4.改写SQL:优化表连接顺序、子查询、in/exists用法,大数据量场景优先exists;5.分区优化:大表建立分区表(时间分区、范围分区),缩小查询扫描范围;6.参数优化:调整SGA、PGA内存参数,优化数据库缓存命中率。三、高频实操场景题7.Oraclein和exists的区别?如何选用?核心区别:驱动表不同,执行逻辑相反。in:先执行子查询,将子查询结果缓存,再匹配主查询数据,子表数据量小、主表数据量大时效率高。exists:遍历主表数据,逐行匹配子查询是否存在符合条件的数据,主表数据量小、子表数据量大时效率高。选用原则:小表查大表用in,大表查小表用exists;大数据量场景优先使用exists,可有效减少遍历次数。8.Oracle如何处理海量数据分页?Oracle无limit关键字,传统分页通过rownum实现,深度分页效率极低,优化方案:1.伪列分页优化:通过嵌套查询先排序、筛选主键,再分页,避免全表排序扫描;2.主键偏移分页:利用有序主键、时间字段做偏移查询,适配深度分页场景;3.分区分页:大表按时间分区,分页查询限定分区范围,大幅减少扫描数据量;4.业务优化:限制分页最大页数,前端采用滚动加载替代深度分页。9.简述Oracle物化视图的作用及使用场景物化视图是预计算、预存储的查询结果集,会将复杂查询的结果物理存储在磁盘中,区别于普通视图(实时计算、无存储数据)。核心作用:大幅降低复杂统计、多表关联查询的耗时,提升查询性能,支持定时刷新数据。使用场景:报表统计、数据分析、历史数据查询、多表复杂关联的固定查询场景,无需实时最新数据,可容忍短暂数据延迟的业务。第三部分MySQL与Oracle对比面试题1.分页语法区别MySQL:使用limitm,n语法,简洁高效,支持直接偏移分页。Oracle:无limit,通过rownum伪列实现分页,深度分页需嵌套查询优化。2.事务提交方式区别MySQL:默认自动提交事务,单条DML语句执行完毕自动commit。Oracle:默认手动提交事务,需主动执行commit,否则事务不结束、锁不释放。3.空值处理区别MySQL:null和空字符串''是两个不同值,判断空值用isnull、=''均可。Oracle:null和空字

温馨提示

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

评论

0/150

提交评论