MySQL数据库面试题及答案(实战版).docxVIP

MySQL数据库面试题及答案(实战版).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

MySQL数据库面试题及答案(实战版)

一、基础原理类

1.说说MySQL的存储引擎有哪些,InnoDB和MyISAM的核心区别?

答案:

常用存储引擎有InnoDB、MyISAM、Memory等,其中InnoDB是MySQL5.5+默认引擎。核心区别:

事务支持:InnoDB支持ACID事务,MyISAM不支持;

锁机制:InnoDB支持行级锁和表级锁,MyISAM仅支持表级锁(写操作会阻塞全表读);

索引结构:InnoDB的主键索引是聚簇索引(数据和索引存一起),辅助索引存主键ID;MyISAM是非聚簇索引(数据和索引分离);

崩溃恢复:InnoDB有redo/undo日志,崩溃后可恢复;MyISAM恢复困难,可能丢数据;

适用场景:InnoDB适合写多读少、需要事务的场景(如电商订单);MyISAM适合读多写少、不需要事务的场景(如博客文章)。

2.什么是聚簇索引和非聚簇索引?InnoDB为什么推荐用自增主键当聚簇索引?

答案:

聚簇索引:索引和数据物理存储在一起,索引的叶子节点就是数据行,一张表只有一个聚簇索引;

非聚簇索引:索引和数据分开存储,索引叶子节点存的是数据行的地址(或主键ID),一张表可以有多个。

InnoDB用自增主键当聚簇索引的原因:

自增主键是连续的,插入新数据时不会导致索引页分裂(如果用非自增主键,插入时可能需要挪动已有数据,影响性能);

聚簇索引的叶子节点存全量数据,查询时如果命中聚簇索引,无需回表,效率高;

辅助索引只存主键ID,比存其他字段更节省空间。

3.MySQL事务的ACID是指什么?InnoDB如何保证ACID?

答案:

A(原子性):事务要么全执行,要么全回滚;

C(一致性):事务执行前后,数据总状态一致(如转账前后总金额不变);

I(隔离性):多个事务并发执行时,相互不干扰;

D(持久性):事务提交后,数据变更永久保存。

InnoDB的实现方式:

原子性/一致性:通过undo日志(记录数据修改前的状态,回滚时恢复);

持久性:通过redo日志(记录数据修改后的状态,崩溃后重做已提交事务);

隔离性:通过锁机制+MVCC(多版本并发控制)。

二、索引与查询优化类

1.索引的作用是什么?常见的索引类型有哪些?

答案:

作用:加快查询速度(减少磁盘I/O次数),约束数据(如唯一索引保证数据不重复)。

常见类型:

按数据结构:B+树索引(默认,适合范围查询)、哈希索引(适合等值查询,不支持范围)、全文索引(适合文本模糊查询);

按功能:主键索引(唯一非空)、唯一索引(唯一,可空)、普通索引(无约束)、联合索引(多字段组合)。

2.什么是联合索引的“最左前缀原则”?举个例子说明。

答案:

联合索引(a,b,c)的索引树是按a→b→c的顺序构建的,查询时必须从最左列a开始匹配,否则无法命中索引。

示例:

命中索引:wherea=1;wherea=1andb=2;wherea=1andb=2andc=3;

不命中索引:whereb=2;wherec=3;wherea=1andc=3(跳过b,无法命中后续列)。

注意:如果查询条件中a是范围查询(如a1),则b和c的索引会失效,只能用到a的索引。

3.哪些情况会导致索引失效?如何优化?

答案:

常见索引失效场景:

函数或运算操作索引列(如wheredate(create_time)=2024-01-01、whereid+1=10);

字符串不加引号(如wherephonephone是varchar类型,会触发隐式转换);

使用or连接非索引列(如wherea=1orb=2,b无索引则全表扫描);

like以%开头(如wherenamelike%张三,无法命中索引;like张三%可以命中);

联合索引不满足最左前缀原则。

优化方案:

避免索引列做函数/运算,改在参数上操作(如wherecreate_time=2024-01-0100:00:00andcreate_time2024-01-0200:00:00);

字符串查询加引号,保持类型一致;

or连接的字段都加索引,或改用union;

模糊查询尽量用右模糊,如需左模糊,考虑全文索引或业务调整;

联合索引设计时贴合查询场景,把常用查询字段放左边。

4.如何优化MySQL慢查询?

答案:

定位慢查询:开启慢查询日志(slow_query_log=1),设置慢查询阈值(long_query_time=1秒),通过exp

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档